ext2 to ext3

Lenne 2 azonos méretű partíció az egyik ext2 a másik ext3. hogyan tudnám átmásolni "konvertálni" az ext2-es filerendszert a ext3-ra úgy, hogy az ext2 megmaradjon. A sima file másolás nem megoldható, mert a root file rendszert is kéne másolni.

Hozzászólások

tar --create --one-file-system --totals --directory /mnt/ext2 . | tar --extract --preserve --atime-preserve --directory /mnt/ext3

Nulladik lépésben single mód, minden szolgáltatás leállít, lsof kimenete megnéz, hogy tényleg nincs olyan nyitott fájl, ami problémát okozna... Ha ez kész, akkor egy jól irányzott find (-depth nem lefelejteni, /proc és /dev kihagy) a kimenet meg odaadni egy cpio-nak, (-pdmv ha jól tévedek) aztán sutty, már megy is. (Ez az egyike a "101 gyakori kérdés láma kezdő rendszergazdáktól" c. el nem készült doksinak...)

Live linux bebootol
ext2 felmount ro
ext3 felmount rw
+rsync
vagy
nem mountol semmit
csinál tükör ext2
dd if=/dev/forras of=/dev/cel bs=1024k

majd a cel konvertál ext3-ba

esetleg soft raid1-el forrás türöz, softraid bont de én ilynt csak hw raid megoldással csináltam.

Ha átadod a tudásod neked attól még nem lesz kevesebb belőle..

bootolaskor add a kernel parameterekhez, hogy

ro init=/bin/sh

. igy nem indul el a teljes rendszer, hanem kapsz egy promptot, a rootfs meg ro-ban lesz felmountolva. igy a fent mar leirtak kozul szinte barmelyik menni fog:

-

dd if=/dev/src of=/dev/target; tune2fs -j /dev/target

-

dd_rescue /dev/src /dev/target; tune2fs -j /dev/target

-

mount /dev/target /mnt; cp -avr -x / /mnt/; umount /mnt

-

mount /dev/target /mnt; rsync -avr -x / /mnt/; umount /mnt

- ...

vigyazz, ne gepeld el a pranacsot, nem lesz job control es nem tudod CTRL+C-vel leloni, ha elszurod.

Az init=/bin/sh még stimmel. A dd viszont nagyon nem erre való. Ja, és a cpio kimaradt :-)

cd /
mkdir idemegy
mount /dev/_az_ext3_particio /idemegy -t ext3 -o noatime
find . -depth -mount -print | cpio -Bpdumv /idemegy

Rvid magyarázat: a -depth a könyvtáraknak előbb a tartalmát listázza, és utána magát a könyvtárat, így a cpio előbb másolja a könyvtárak tartalmát (ezért van ott a "d" kapcsoló), utána pedig magát a könyvtárat. Így a könyvtár időadatai (mtime pl.) is azonosak maradnak. A -mount vagy a -xdev azt mondja, hogy egy device-on belül keressen, így nem kell trükközni a /idemegy könyvtár (ahova a másolás történk, illetve a /proc trükkös kiszűrésével).

A cpio esetén a "B" az 5k-ra emeli a blokkméretet az 512 bájtról, a "p" a copy-pass mód (az STDIN-en kapott fájlok másolása a paraméterben megadott helyre), a "d"-vel megcsinálja a könyvtárat is, ha kell (kell, mert a find szándékosan előbb adja a fájlt, utána a könyvtárat), az "u" az unconditional, azaz kérdés nélkül felülírja a létező fájlokat (a könyvtárak előbb elkészülnek, mint a másolás, őket kell fölülcsapni), az "m" a módosítási időt őrzi meg a másolt fájlok esetén, a "v" meg a verbose mód, hogy lásd, hol tart a dolog.