1

Temat: extroot na /dev/md0

Witam wszystkich serdecznie,

W ramach komplikowania sobie zycia postanowiłem postawić extroot na raidzie programowym. Generalnie mam utworzone maciorki i /etc/mdadm.conf. Pierwszy problem jest taki, ze po restarcie dziadostwo się nie składa. Tzn. mam dyski ale nie mam macierzy. Trzeba ręcznie wywołać:
mdadm -A /dev/md?
Sa jakieś skrypty do podnoszenia raidow w OpenWrt czy trzeba samemu?? Jesli samemu to gdzie to powinno byc podpięte żeby się dało jako extroot pomountowac??

TPLink MR3420v2 + Huawei E3131s-2 + attitude_adjustment/12.09
TPLink WR1043NDv2 + barrier_breaker/14.07

2

Odp: extroot na /dev/md0

A system to? Jeżeli BB to extroot jest składany przez block z block-mount, więc czeka Cię kompilacja programu żeby przed zrobieniem extroota złożyć raida.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

3

Odp: extroot na /dev/md0

Cezary napisał/a:

A system to?

barrier_breaker 14.07

Cezary napisał/a:

Jeżeli BB to extroot jest składany przez block z block-mount, więc czeka Cię kompilacja programu żeby przed zrobieniem extroota złożyć raida.

No to slabo.  A nie da sie jakiegos hooka podlaczyc??
Probowalem tak:

# cat /lib/preinit/49_mdadm_assemble_root
#!/bin/sh

LOG=/tmp/mdadm.log

mdadm_assemble_root() {
    /bin/df >> $LOG
    /usr/sbin/lsmod >> $LOG
    /sbin/mdadm -A /dev/md0 >>$LOG 2>&1
}

boot_hook_add preinit_main mdadm_assemble_root

1. Jest szansa zeby jakos tak poszlo??

2. Da sie z tego jakies komunikaty wydusic?? ustawialem juz rozne LOG= i nic. Moze jakis logger??

TPLink MR3420v2 + Huawei E3131s-2 + attitude_adjustment/12.09
TPLink WR1043NDv2 + barrier_breaker/14.07

4

Odp: extroot na /dev/md0

Nie wiem czy tak pójdzie w BB, jeszcze nie sprawdzałem smile

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

5

Odp: extroot na /dev/md0

Dla mnie najwiekszy problem to brak mozliwosci debugowania. Nie wiem nawet czy ten hook sie odpala. Masz jakis pomysl gdzie wyslac komunikaty? Po starcie pliku /tmp/mdadm.log nie ma, probowalem nawet /dev/mdadm. W koncu /dev jest tez na tmpfsie.

TPLink MR3420v2 + Huawei E3131s-2 + attitude_adjustment/12.09
TPLink WR1043NDv2 + barrier_breaker/14.07

6

Odp: extroot na /dev/md0

pld napisał/a:

Dla mnie najwiekszy problem to brak mozliwosci debugowania. Nie wiem nawet czy ten hook sie odpala. Masz jakis pomysl gdzie wyslac komunikaty? Po starcie pliku /tmp/mdadm.log nie ma, probowalem nawet /dev/mdadm. W koncu /dev jest tez na tmpfsie.

Przecież to zwykłe skrypty są, daj po prostu "echo" i powinieneś dostać to na konsoli systemowej.

7 (edytowany przez pld 2014-10-07 22:19:54)

Odp: extroot na /dev/md0

Czegos nie kleje. Te skrypty odpalane sa zanim wstanie system wiec nie bardzo wiem o jaka konsole Ci chodzi. Szeregowki nie mam. Przez siec raczej sie nie da bo jeszcze nie podniesiona. Generalnie chodzi mi o mozliwosc obejzenia komunikatow generowanych przez skrypt odpalany zamin podmountuje sie overlay.

Edit: z tym overlay to glupote strzelilem bo tam jest ten skrypt. No wlasnie: co jest podmountowane i gdzie jak odpalaja sie hooki??

TPLink MR3420v2 + Huawei E3131s-2 + attitude_adjustment/12.09
TPLink WR1043NDv2 + barrier_breaker/14.07

8

Odp: extroot na /dev/md0

pld napisał/a:

Czegos nie kleje. Te skrypty odpalane sa zanim wstanie system wiec nie bardzo wiem o jaka konsole Ci chodzi. Szeregowki nie mam. Przez siec raczej sie nie da bo jeszcze nie podniesiona. Generalnie chodzi mi o mozliwosc obejzenia komunikatow generowanych przez skrypt odpalany zamin podmountuje sie overlay.

Mowa o konsoli szeregowej. Te skrypty są odpalane już po starcie systemu (chociaż nie do końca rozumiem, co masz na myśli przez "system") i... sieć generalnie też tam już jest dostępna, bo przecież failsafe jest zrealizowany właśnie w preinit.

pld napisał/a:

Edit: z tym overlay to glupote strzelilem bo tam jest ten skrypt. No wlasnie: co jest podmountowane i gdzie jak odpalaja sie hooki??

Najwłaściwsze w tym momencie pytanie, to: jaka platforma?

9

Odp: extroot na /dev/md0

OS: barrier_breaker 14.07
(było w 3 poście)

TPLink MR3420v2 + Huawei E3131s-2 + attitude_adjustment/12.09
TPLink WR1043NDv2 + barrier_breaker/14.07

10

Odp: extroot na /dev/md0

pld napisał/a:

OS: barrier_breaker 14.07
(było w 3 poście)

Nie, nie. To jest nazwa dystrybucji. Masz tam kernel + całą masę autorskiego softu od developerów OpenWRT. Ja pytałem raczej o to, co rozumiesz przez "zanim wstanie system"? I o jakiej platformie sprzętowej jest mowa?

11

Odp: extroot na /dev/md0

pepe2k napisał/a:
pld napisał/a:

OS: barrier_breaker 14.07
(było w 3 poście)

Nie, nie. To jest nazwa dystrybucji. Masz tam kernel + całą masę autorskiego softu od developerów OpenWRT.

No to może tak: sprzęt: TPLink WR1043NDv2, zainstalowane:
https://downloads.openwrt.org/barrier_b … pgrade.bin

pepe2k napisał/a:

Ja pytałem raczej o to, co rozumiesz przez "zanim wstanie system"? I o jakiej platformie sprzętowej jest mowa?

Tak prawdę mówiąc to nie znam na tyle dobrze OpenWrt żeby Ci powiedzieć kiedy zostanie odpalony który hook. Ja potrzebuje się podpiąć gdzieś przed zamontowaniem extroota. Skoro tam jest docelowa konfiguracja to zakładam że serwisy jeszcze nie działają (i net zapewne też nie). Stworzyłem sobie taki plik:
# cat /lib/preinit/49_mdadm_assemble_root
#!/bin/sh

LOG=/tmp/mdadm.log

mdadm_assemble_root() {
    /bin/df >> $LOG
    /usr/sbin/lsmod >> $LOG
    /sbin/mdadm -A /dev/md0 >>$LOG 2>&1
}

boot_hook_add preinit_main mdadm_assemble_root

Ale niestety nie mam /tmp/mdadm.log. Dla tego zakładam, że w chwili uruchomienia tmp nie jest zamontowane.

TPLink MR3420v2 + Huawei E3131s-2 + attitude_adjustment/12.09
TPLink WR1043NDv2 + barrier_breaker/14.07

12

Odp: extroot na /dev/md0

Gdzieś na Wiki OpenWRT jest mniej więcej opisane, w którym miejscu co jest robione. Ale oczywiście aktualnie znowu Wiki leży, albo ładuje się w nieskończoność... poszukaj.

Jeżeli mnie pamięć nie myli, to early.c w źródłach procd. Tam są montowane /tmp, /proc, /sys, /dev i chyba coś jeszcze. I dzieje się to na samiutkim początku, jeszcze przed preinit.

I nie pisz, że nie masz tam konsoli szeregowej, bo przecież masz (chyba, że to był skrót myślowy od "nie mam podłączonej"). Jak się do niej podepniesz (adapter USB-UART), to "echo" z preinita dostaniesz właśnie tam.

13

Odp: extroot na /dev/md0

/tmp jest montowane na bardzo wczesnym etapie startu (razem z proc i sys). Problem masz ideologiczny bo montowanie extroota wykonuje mount_root w skrypcie 80... Na etapie montowania nie widzi jeszcze skryptu który zrobiłeś. Nie jestem pewien czy da się teraz to oskryptować, chyba tak jak pisałem trzeba po prostu przerobić fstools

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

14

Odp: extroot na /dev/md0

Ten problem ideologiczny polega na tym, że taki skrypt dla preinita trzeba wstawić we własny obraz, wtedy zadziała na pewno.

15

Odp: extroot na /dev/md0

Tak.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

16

Odp: extroot na /dev/md0

pepe2k: jasne, mam na płytce szeregówkę tylko nie mam kabla.

Cezary: Może od początku. Skrypt jest na /dev/mtdblock3. O ile to wszytko dobrze rozumiem to w czasie startu /dev/mtdblock3 jest tymczasowo mountowane gdzieś w celu zczytania konfiguracji. Tam jest /etc/config/fstab bez którego w ogóle nie wiadomo czy mamy jakiś extroot i jeśli tak to jaki. Zgaduje, że wtedy są zczytywane także hooki dodane przez użtkownika do /dev/mtdblock3. Dopiero potem jest mountowany extroot. NIe wiem czy coś się nie zmieniło. Na pewno było tak w AA, Inacej twój patent:
http://eko.one.pl/forum/viewtopic.php?pid=65180#p65180
by nie działał. Tam jest dość podobna sytuacja. Trzeba zrobić "coś" przed zamountowaniem extroota. W tym celu dodajemy skrypt do /dev/mtdblock3.

TPLink MR3420v2 + Huawei E3131s-2 + attitude_adjustment/12.09
TPLink WR1043NDv2 + barrier_breaker/14.07

17

Odp: extroot na /dev/md0

Zmieniło się. Kiedyś to były czyste skrypty i po kolei były robione różne rzeczy, m.in montowany jffs a później extroot z kolejnego skryptu. Teraz to robi jeden program binarny i w trakcie pomiędzy montowaniem jffs, czytaniem konfiguracji i zrobieniem extroota nie ma wykonywania żadnego skryptu bo to robi ten program binarny.

Zastanawiam się czy nie zadziała trochę na około coś takiego: pozwolić mu zamontować /overlay (nie extroota) a potem już w skryptach samodzielnie montować extroot.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

18 (edytowany przez pld 2014-10-08 18:12:44)

Odp: extroot na /dev/md0

Cezary napisał/a:

Zastanawiam się czy nie zadziała trochę na około coś takiego: pozwolić mu zamontować /overlay (nie extroota) a potem już w skryptach samodzielnie montować extroot.

Prawdę mówiąc też mi zaczął jakiś pivot chodzić po głowie. Nie wiem tylko czy nie będzie problemu z odmountowaniem overlay. Jakaś binarka może "przytrzymać"

Przyszedł mi do głowy jeszcze jeden pomysł. Robimy tak:
mv /sbin/block /sbin/block.orig

Potem tworzymy skrypt: /sbin/block w którym jest:

#!/bin/sh
grep -q md0 /proc/mdstat || mdadm -A /dev/md0
exec $0.orig $*

Oczywiście trzeba by wymacać co gdzie jest podmountowane bo tak pewno nie znajdzie ani mdadm ani mdadm.conf.
Co myślicie??

TPLink MR3420v2 + Huawei E3131s-2 + attitude_adjustment/12.09
TPLink WR1043NDv2 + barrier_breaker/14.07

19

Odp: extroot na /dev/md0

block pełni wiele innych funkcji, więc żeby to mdadm nie uruchamiało się za często.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

20

Odp: extroot na /dev/md0

Powinno się uruchamiać dopóki dopóty nie złoży się md0. Czyli jeden raz pod warunkiem, że uda się "wymacać" wszystkie potrzebne pliki. Po to jest ten grep na początku. Myślę, że stestuje na jakimś starym lapku.

TPLink MR3420v2 + Huawei E3131s-2 + attitude_adjustment/12.09
TPLink WR1043NDv2 + barrier_breaker/14.07

21

Odp: extroot na /dev/md0

Jest postęp. Ale po kolei.

1. Z x86 nie ma co się bawić bo tam wszystko jest inaczej.

2. block nie daje się łatwo oszukać. Dziadostwo sprawdza jak się nazywa i patent typu:
mv block block_
nie działa. Ale to nie kłopot. Robi się tak:
mv /sbin/block /sbin/block_/block
W ten sposób zachowujemy nazwę binarki.

3. Testowo napisałem taki skrypcik(*):

# cat /sbin/block
#!/bin/sh
LOG=/tmp/log.txt
echo XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX >> $LOG
cat /proc/mounts >> $LOG
echo $0 $* >> $LOG
exec $0_/block $*

i w logu mam:

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
rootfs / rootfs rw 0 0
/dev/root / squashfs ro,relatime 0 0
proc /proc proc rw,noatime 0 0
sysfs /sys sysfs rw,noatime 0 0
tmpfs /tmp tmpfs rw,nosuid,nodev,noatime 0 0
tmpfs /dev tmpfs rw,noatime,size=512k,mode=755 0 0
devpts /dev/pts devpts rw,noatime,mode=600 0 0
/dev/mtdblock3 /tmp/overlay jffs2 rw,noatime 0 0
/tmp/overlay/sbin/block extroot
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
rootfs / rootfs rw 0 0
/dev/root /rom squashfs ro,relatime 0 0
proc /proc proc rw,noatime 0 0
sysfs /sys sysfs rw,noatime 0 0
tmpfs /tmp tmpfs rw,nosuid,nodev,noatime 0 0
/dev/mtdblock3 /overlay jffs2 rw,noatime 0 0
overlayfs:/overlay / overlayfs rw,noatime,lowerdir=/,upperdir=/overlay 0 0
tmpfs /dev tmpfs rw,relatime,size=512k,mode=755 0 0
devpts /dev/pts devpts rw,relatime,mode=600 0 0
/sbin/block hotplug
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
rootfs / rootfs rw 0 0
/dev/root /rom squashfs ro,relatime 0 0
proc /proc proc rw,noatime 0 0
sysfs /sys sysfs rw,noatime 0 0
tmpfs /tmp tmpfs rw,nosuid,nodev,noatime 0 0
/dev/mtdblock3 /overlay jffs2 rw,noatime 0 0
overlayfs:/overlay / overlayfs rw,noatime,lowerdir=/,upperdir=/overlay 0 0
tmpfs /dev tmpfs rw,relatime,size=512k,mode=755 0 0
devpts /dev/pts devpts rw,relatime,mode=600 0 0
/sbin/block hotplug

Dalej powtarza się to samo w nieskończoność.
Czyli już wiemy że (najprawdopodobniej(**) )za pierwszym razem block jest wywoływany z parametrem extroot. Co więcej widać dokładnie co i gdzie jest podmountowane.

(*) Dla mniej doświadczonych słuchaczy (czy też podsłuchiwaczy smile ). Te wszystkie dziwne znaczki typu $0 $* tudzież nazwy plików i katalogów są przemyślane i odradzam samodzielne eksperymenty.
(**) Pisze najprawdopodobniej bo jeśli było jakieś wywołanie przed zamountowanie /tmp to nie będzie o tym wzmianki w logu.

TPLink MR3420v2 + Huawei E3131s-2 + attitude_adjustment/12.09
TPLink WR1043NDv2 + barrier_breaker/14.07

22

Odp: extroot na /dev/md0

Prościej by było jak byś sobie po prostu fstools przekompilował z tym co chcesz.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

23

Odp: extroot na /dev/md0

Cezary napisał/a:

Prościej by było jak byś sobie po prostu fstools przekompilował z tym co chcesz.

Dla nie proście napisać parę skryptów. Poza tym jeśli mi się uda to to otwiera prostą ścieżkę różnych innych modyfikacji takich jak modeswitch dla E3131s-2 i jeszcze innych nawet bardziej patologicznych konfiguracji bez potrzeby budowania. Generalnie wystarczy konsola i kilka komend.

TPLink MR3420v2 + Huawei E3131s-2 + attitude_adjustment/12.09
TPLink WR1043NDv2 + barrier_breaker/14.07

24 (edytowany przez pld 2014-10-08 22:43:49)

Odp: extroot na /dev/md0

Uha!! Poszło:

BusyBox v1.22.1 (2014-09-20 22:01:35 CEST) built-in shell (ash)
Enter 'help' for a list of built-in commands.

  _______                     ________        __
|       |.-----.-----.-----.|  |  |  |.----.|  |_
|   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
|_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
-----------------------------------------------------
BARRIER BREAKER (14.07, r42625)
-----------------------------------------------------
  * 1/2 oz Galliano         Pour all ingredients into
  * 4 oz cold Coffee        an irish coffee mug filled
  * 1 1/2 oz Dark Rum       with crushed ice. Stir.
  * 2 tsp. Creme de Cacao
-----------------------------------------------------
root@Chronos:~# df
Filesystem           1K-blocks      Used Available Use% Mounted on
rootfs                  122771      9107    111044   8% /
/dev/root                 2304      2304         0 100% /rom
tmpfs                    30672       128     30544   0% /tmp
/dev/md0                122771      9107    111044   8% /overlay
overlayfs:/overlay      122771      9107    111044   8% /
tmpfs                      512         0       512   0% /dev
root@Chronos:~# ll /sbin/block /sbin/block_/block /root/dev
-rwxr-xr-x    1 root     root           419 Oct  8 22:20 /sbin/block
-rwxr-xr-x    1 root     root         19496 Sep 20 22:03 /sbin/block_/block

/root/dev:
drwxr-xr-x    2 root     root          1024 Oct  8 22:22 .
drwxr-xr-x    1 root     root          1024 Oct  8 22:06 ..
brw-r--r--    1 root     root        8,   0 Jan  1  1970 sda
brw-r--r--    1 root     root        8,   1 Jan  1  1970 sda1
brw-r--r--    1 root     root        8,   2 Jan  1  1970 sda2
brw-r--r--    1 root     root        8,   3 Jan  1  1970 sda3
brw-r--r--    1 root     root        8,   4 Jan  1  1970 sda4
brw-r--r--    1 root     root        8,   5 Jan  1  1970 sda5
brw-r--r--    1 root     root        8,  16 Jan  1  1970 sdb
brw-r--r--    1 root     root        8,  17 Jan  1  1970 sdb1
brw-r--r--    1 root     root        8,  18 Jan  1  1970 sdb2
brw-r--r--    1 root     root        8,  19 Jan  1  1970 sdb3
brw-r--r--    1 root     root        8,  20 Jan  1  1970 sdb4
brw-r--r--    1 root     root        8,  21 Jan  1  1970 sdb5
root@Chronos:~# cat /sbin/block
#!/bin/sh
[ "$1" = extroot ] && {
    LOG=/tmp/mdadm.txt
    /usr/sbin/insmod /tmp/overlay/lib/modules/3.10.49/md-mod.ko >> $LOG 2>&1
    /usr/sbin/insmod /tmp/overlay/lib/modules/3.10.49/raid1.ko >> $LOG 2>&1
    /bin/sleep 5
    /bin/cp -a /tmp/overlay/root/dev/* /dev/ >> $LOG 2>&1
    /tmp/overlay/sbin/mdadm --assemble --scan \
        --config /tmp/overlay/etc/mdadm.conf >> $LOG 2>&1
    cat /proc/mdstat >> $LOG 2>&1
}
exec $0_/block $*
root@Chronos:/sbin# cat /etc/config/fstab

config global
    option anon_swap '0'
    option anon_mount '0'
    option auto_swap '1'
    option auto_mount '1'
    option delay_root '5'
    option check_fs '1'

config swap
    option enabled '1'
    option priority '0'
    option device '/dev/sda1'

config swap
    option enabled '1'
    option priority '0'
    option device '/dev/sdb1'

config mount
        option target        /overlay
        option device        /dev/md0
        option fstype        ext4
        option options       'rw,sync,noatime,nodiratime'
        option enabled       1
        option enabled_fsck  1


Oto pierwszy w świecie TP-LInk z exrootem na md-raid wink

TPLink MR3420v2 + Huawei E3131s-2 + attitude_adjustment/12.09
TPLink WR1043NDv2 + barrier_breaker/14.07

25

Odp: extroot na /dev/md0

Przy większej ilości maciorek pojawiają się anomalia. Dla tego podsyłam poprawiony skrypt. Przy okazji zoptymalizowałem pod względem sleepów.

#!/bin/sh
[ "$1" = extroot ] && {
md_assemble() {
  for i in 1 2 3 4 5 6 7 8 9 10
    do
      /tmp/overlay/sbin/mdadm --assemble /dev/$1 \
    --config /tmp/overlay/etc/mdadm.conf
      /bin/grep -q "^$1" /proc/mdstat && break
      /bin/sleep 1
    done
}
    LOG=/tmp/mdadm.txt
    /usr/sbin/insmod /tmp/overlay/lib/modules/3.10.49/md-mod.ko >> $LOG 2>&1
    /usr/sbin/insmod /tmp/overlay/lib/modules/3.10.49/raid1.ko >> $LOG 2>&1
    /bin/cp -a /tmp/overlay/root/dev/* /dev/ >> $LOG 2>&1
    /bin/sleep 3
    for MD in md0 md1 md2 md3
      do
        md_assemble $MD >> $LOG 2>&1
      done
    cat /proc/mdstat >> $LOG 2>&1
}
exec $0_/block $*

Na zdrowie!

PS. Jak coś mi jeszcze przyjdzie do głowy to wyedytuje.

TPLink MR3420v2 + Huawei E3131s-2 + attitude_adjustment/12.09
TPLink WR1043NDv2 + barrier_breaker/14.07