Sziasztok!
Egy beagyazott ge'p cf-kartyajan van egy ext2 filerendszer, ami normal esetben csak olvashato modon van felcsatolva (mount -o ro ...). Megy is a rendszer. Namost, dd + netcat + ... kombo'val csinalok egy klo'nt errol a rendszerro"l (mondjuk egy masik cf-kartyara, vagy egy sima file-ba lementem egy mezei hdd-re, mindegy). Ez is jo. Nomost, a miheztartas ve'gu"tt, az o"rdo"g nem alszik alapon raengedek erre a klo'nra egy fsck-t. Ez meg azt mondja hogy "fs was not cleanly unmounted, check forced".
A kerdes, roviden: ezt igy hogy? Nem tiszta egy readonly mount?
A.
- 5313 megtekintés
Hozzászólások
Hát ugye megy a rendszer => nem volt umount. Azaz igazat mond a gép.
- A hozzászóláshoz be kell jelentkezni
Csak ott a dolog szépséghibája, hogy normális körülmények között egy read only opcióval mountolt fájlrendszerre nem lenne szabad írnia az op.rendszernek.
Márpedig a jelek szerint beleírt.
(nekem vannak kétségeim - gyanítom, az eredetit felejtették el umountolni még amikor íródott -> image fájllal kipróbáltam, nem produkált semmi hasonlót)
Aki tudja, csinálja, aki nem tudja, tanítja... Hm... igazgatónak talán még jó lennék. :)
- A hozzászóláshoz be kell jelentkezni
A fs-be beleírt? A mount nem hinném, hogy a fs-ben lenne. Olyan különbség, mint egy fájlt írni, vagy a direntry-t.
- A hozzászóláshoz be kell jelentkezni
Végeredményben az a "dirty flag" (vagy mi a neve) is a fs része.
Hasogathatjuk a szőrszálakat, ettől még a lényeg megmarad: a fájlrendszeren nem lenne szabad nyomot hagynia az op.rendszernek, ha ro mountoltad.
Aki tudja, csinálja, aki nem tudja, tanítja... Hm... igazgatónak talán még jó lennék. :)
- A hozzászóláshoz be kell jelentkezni
Szóval akkor érthető, hogy senki sem állította, hogy ÍRT valaki.
Pl.:
(rendszer indul)
mount -o ro
mount -o rw -o remount
írunk vagy sem
mount -o ro -o remount
kikapcs
...
bekapcs
állítás: nem volt umount, nem tudjuk írt-e valaki, nézzük meg nem maradt-e hiba!
Ezt jelenti az üzenet. Nem állítja, hogy írtak, vagy hiba lenne. És talán nincs olyan history, ami a
fenti eseménysort rögzíti, tehát nem tudjuk - ezért kell ellenőrzni. (Mert mintha az ext2 nem journaling lenne.)
Végül a válasz az alapkérdésre: Ellenőrizne kell az fs-t, de ha mountolás során biztosan nincs lehetőség írásra, akkor nem is lesz hiba.
A jelenség ismerős, Van egy pfsense (FreeBSD) tűzfalam, amely ro. Készítettem egy + fs-t. Ha elmegy a villany, arra kell az fsck.
- A hozzászóláshoz be kell jelentkezni
De, valaki írt. Különben honnan tudná az fsck, hogy nem volt umount?
Megesküldni nem mernék rá, de ha egy "-o rw,remount" után kiadsz egy "-o ro,remount"-ot, akkor azt úgy kezeli, mintha megtörtént volna az umount.
"the ext2 filesystem has a special marker in its superblock that tells whether the filesystem was unmounted properly after the previous mount."
http://www.tldp.org/LDP/sag/html/filesystems.html
ui: a "superblock" nem jutott eszembe az előbb.
Aki tudja, csinálja, aki nem tudja, tanítja... Hm... igazgatónak talán még jó lennék. :)
- A hozzászóláshoz be kell jelentkezni
The s_state variable is used by the kernel to pass the identification result to third party utilities:
bit 0 of s_state is reset when the partition is mounted and set when the partition is unmounted. Thus, a value of 0 on an unmounted filesystem means that the filesystem was not unmounted properly - The filesystem is not "clean" and probably contains errors.
bit 1 of s_state is set by the kernel when it detects an error in the filesystem. A value of 0 doesn't mean that there isn't an error in the filesystem, just that the kernel didn't find any.
http://www.osdever.net/documents/Ext2fs-overview-0.1.pdf
Ez itt nem írja az ro lehetőséget csak annyit, hogy a kernel mount esetén törli a bitet. Nyelvészkedjünk: a hibaüzenet annyit jelent, amit bele írtak. Aki írta az fs-t: a kernel mount-kor.
- A hozzászóláshoz be kell jelentkezni
Igen, ez lehet, de ezen felul biztos van me'g +1 bitnyi informacio is... lasd lentebb...
- A hozzászóláshoz be kell jelentkezni
root@testmachine:~# diff x.img z.img
root@testmachine:~# mount -o ro,loop x.img /mnt
root@testmachine:~# diff x.img z.img
root@testmachine:~# umount /mnt
root@testmachine:~# diff x.img z.img
root@testmachine:~# mount -o rw,loop x.img /mnt
root@testmachine:~# diff x.img z.img
Binary files x.img and z.img differ
root@testmachine:~# umount /mnt
root@testmachine:~# diff x.img z.img
Binary files x.img and z.img differ
Mondjuk ez csak annyit mutat, hogy a ro opció hatására egyetlen bit sem változik.
update: közben kicsit utánanéztem...
Az ext2 superblock az eszköz 1024. bájtjánál (offset 1024) kezdődik és 1024 byte hosszú.
Ennek megfelelően:
root@testmachine:~# cmp x.img z.img -bl
1073 117 O 207 M-^G
1074 165 u 164 t
1077 4 ^D 3 ^C
root@testmachine:~# mount -o rw,loop x.img /mnt
root@testmachine:~# cmp x.img z.img -bl
1073 41 ! 207 M-^G
1074 173 { 164 t
1077 5 ^E 3 ^C
1083 0 ^@ 1 ^A
root@testmachine:~# umount /mnt
root@testmachine:~# cmp x.img z.img -bl
1073 56 . 207 M-^G
1074 173 { 164 t
1077 5 ^E 3 ^C
Ha ro mountolod, akkor nem változik a superblock. Ha rw, akkor módosul a s_mtime, s_mnt_count, s_state mező (mount time, mount count, fs state), majd umount után a s_state értéke visszaíródik a mount előtti állapotra.
Aki tudja, csinálja, aki nem tudja, tanítja... Hm... igazgatónak talán még jó lennék. :)
- A hozzászóláshoz be kell jelentkezni
No, ez már győzelem!
- A hozzászóláshoz be kell jelentkezni
Na, csinaltam most egy feltucat klonozast, csak ugy, hogy kicsit probaljak a vegere jarni, "hatha okosabbak leszunk" alapon.
Ugy tunik, az van hogy egy "orokletes" unclean allapot beragad akkor is, ha kozben egy (vagy tobb) remount,rw - remount,ro ciklus lemegy. Hiba ettol fuggetlenul nincs a filerendszerben, de attol me'g mert csak ugy felmountolom irasra, meg utana lecsatolom es/vagy atteszem readonly-ra, attol me'g megmarad ez a szoszerint: ``not cleanly unmounted'' statusz.
Kerdes most persze az, hogy ezen a konkret rendszeren hogyan lehet elve'gezni ezt a javitast, anelkul hogy fizikailag kiszedne'm a cf-kartyat. Mivel a rootfs-rol van szo, ezert csak ugy lecsatolni nem lehet... kerdes, hogy reaodnly-kent felcsatolt rendszer blkdev-je're ra lehet e engedni... nyilvan nem annyira egeszseges ;)
- A hozzászóláshoz be kell jelentkezni
Ez úgy működik, hogy a kernel (+initrd) amikor megszerzi a rootfs-t, akkor még nincs mountolva, majd ro.
Eközben be lehet avatkozni és elindítani fsck-t. A másik megoldás meg pendrive, pl puppy linux és fsck.
A fenti hozzászólásom alapján ez teljesen felesleges. Ellenpróbát csak a "cleanly" leállított rendszer más eszközről elindításával lehetne megtenni. És akkor kiderülne, hogy mégis clean.
- A hozzászóláshoz be kell jelentkezni
Igen, beragad, mert ezt csak az fsck tüntetheti el.
Aki tudja, csinálja, aki nem tudja, tanítja... Hm... igazgatónak talán még jó lennék. :)
- A hozzászóláshoz be kell jelentkezni
a nagykönyv szerint felcsatolt /-re nem engedünk rw fsck-t. :]
szerintem kiszedés nélkül esetleg olyat lehetne csinálni, *ha van mentés a kártyáról*, hogy az initrd-be bekerülő rootfs fsck scriptbe beleteszel egy direkt fsck parancsot, hogy mindenképp tisztítsa meg. (talán a /etc/rcS.d/S07checkfs.sh -> ../init.d/checkfs.sh lehet a jó hely erre.) majd utána update-initramfs vagy hasonló és reboot majd néma imák/mandalák ismétlése, amíg el nem kezd újra pingni.
- A hozzászóláshoz be kell jelentkezni
Esetleg egy
mount -o rw,remount /
touch /forcefsck
mount -o ro,remount /
reboot
Nem tudom, hogy minden rendszeren működik-e...
Aki tudja, csinálja, aki nem tudja, tanítja... Hm... igazgatónak talán még jó lennék. :)
- A hozzászóláshoz be kell jelentkezni
Érdemes lenne megnézni. hogy MIKOR ragadt be ez a flag:
tune2fs -l /dev/rootpartition (helyettesítsd)
Filesystem created:
Last mount time:
Last write time:
- A hozzászóláshoz be kell jelentkezni
ez jó ötlet, a Debianban van support a forcefsck-ra, és úgy látom, hogy a Voyage is megtartotta, szerintem működhet.
akár egy remountrw && touch /forcefsck && remountro && reboot
is elég lehet (Voyage specifik módon).
- A hozzászóláshoz be kell jelentkezni
jaja, legkozelebb megnezem majd, ha arra ja'rok ;] (most kicsit elvitte az ido"t az acceleroval valo szorakozas). valoban nem baj, ha fizikailag kozel vagyunk hozza', murphy megnyugtata'sa ve'gu"tt.
- A hozzászóláshoz be kell jelentkezni
e2fsck -n futtatható ro esetben - ki fogja írni: was not cleanly unmounted, check forced.
- A hozzászóláshoz be kell jelentkezni