Sziasztok,
Kezdő ZFS felhasználóként a következőket tettem: két régi, kisebb HDD-ről egy nagy SSD-re másoltam anyagokat.
Ezt úgy tettem, hogy az ssd_pool/root datasetbe tettem a hdd1 anyagait, a ssd_pool/root/hdd2-be pedig a hdd2 anyagait, hogy miért az már lényegtelen, így sikerült send/recv-elni a régi HDDkról.
A kérdésem, hogy miképpen tudom megszüntetni az ssd_pool/root/hdd2-t, azáltal, hogy a rajta található fájlokat az ssd_pool/root-be szeretném átmozgatni.
Amikor megpróbáltam, akkor észrevettem, hogy ez fizikai másolással jár, amit nem igazán értek, hiszen a mozgatás még ext4-nél is egy gyors művelet volt, csak áttette a bejegyzést egy másik könyvtárba és kész.
Van eset, amikor az egyszerű mv is másolás nélkül megy ZFS-en? Beállításokon, a datasetek elrendezésén múlik? (tekintve, hogy szülő-gyerek módon vannak a datasetek, főleg nem kellene akadály legyen ez..)
Valami más mód amivel tudok másolásmentesen mozgatni? (clone?)
Azért érdekel, mert egyrészt nem szeretném az SSD-t feleslegesen írni, másrészt mi történik, ha nincs annyi szabad hely, hogy egy adott fájl kétszer is elférjen mielőtt törölné az eredetit?
Nekem idáig úgy tűnt, hogy a pool az, ami a fizikai hardverrel van közelebbi kapcsolatban, a datasetek inkább logikai elválasztást jelentenek. De több helyen is azt olvastam, hogy mozgatás szempontjából két dataset az mint két önálló fájlrendszer funkcionál.
Valaki légyszives homályosítson fel! :)
Hozzászólások
Szerintem az inode-átpakolásos mozgatás csak adott fizikai adathordozón belül működik. Te pedig egy olyan adathordozóra akarsz adatot mozgatni, ahol az még nincs jelen.
Debian - The "What?!" starts not!
http://nyizsa.blogspot.com
Bocs, akkor félreérthetően írtam le. Az összes fájl már az SSD-n van, a két fent megnevezett datasetben (az eredeti HDD-ken snapshotoltam, majd a snapshotokat send-recv-tem át az SSD-re és ebből lett a két dataset). A dataset pedig ugyanazon az SSD-n, ugyanazon a poolban.
Amit leirtal, nem biztos, h tutira ertem.
> Nekem idáig úgy tűnt, hogy a pool az, ami a fizikai hardverrel van közelebbi kapcsolatban, a datasetek inkább logikai elválasztást jelentenek. De több helyen is azt olvastam, hogy mozgatás szempontjából két dataset az mint két önálló fájlrendszer funkcionál.
A pool-ban vannak a disk-ek. A pool-on vannak a dataset-ek, amik valoban olyanok, mint kulon filerendszerek (particiokon filerendszer).
Pool-ok kozott file-okat mozgatni csak masolas+torlessel tudsz. Pool-ok kozott tudsz datasetek-eket is mozgatni (masolni).
Azonos pool-on belul dataset-ek kozott szinten csak masolas+torles segitsevel tudsz mozgatni. Azonos pool-on belul dataset-et tudsz mozgatni (zfs rename).
Azonos dataset-en belul tudsz mozgatni file-okat, mintha azonos particion belul csinalnad pl. ext4-en.
Lásd fentebbi válaszom. Miert nem tudok két ugyanazon a poolban levő dataset között (ráadásul jelen esetben a két dataset parent-child kapcsolatban is van) fájlokat mozgatni másolás nélkül?
Ahogy irtam fent, nem lehet. By design ilyen a rendszer. Mondhatni ez a lenyege.
Lehet hogy furcsa ez a kérdés, de több tutorialban is pl azt írják, hogy tedd a fájlrendszer rootot egy datasetre, azán az idő előrehaladtával ha szükséges további gyerek dataseteket csinálhatok, pl mondjuk a /var/lib/postgresql-t ami eddig a rooton volt egyszerű könyvtár, külön datasetre teszem (mondjuk ha a root dataset neve ssd/root, akkor ez lehet ssd/var/lib/postgresl). A tutorialokban ilyenkor azt írják, hogy ekkor a gyerek dataset az a szülőn belül van logikailag (a propertyk öröklődnek, ha a szülő mérete le van korlátozva, az a gyereket is lekorlátozza, stb.). Ebből én azt vontam le (ezek szerint tévesen), hogy ilyen esetekben a két dataset között valamiféle szorosabb kapcsolat van, amely inkább arról szól, hogy finomítani tudom az örökölt propertyket, külön tudom snapshotolni a hierarchyban feljebb levő datasettől, stb. Ezért feltételeztem, hogy miért is ne tudna ez esetben mozgatni (nem másolni+törölni) a kettő között.
De még ha nem is lenne szülő-gyerek viszony a datasetek között, ha a dataset beállításai azonosak (tömörítés, stb.) akkor se látom, hogy miért ne lehetne mozgatni a fájlt, hiszen ugyanazon a poolon belül van, ugyanazon a hardveren.
Gondolom a válasz a ZFS belső felépítésével van kapcsolatban? Hogy a datasetek adatait tényleg teljesen elkülönítve tárolja a hardveren?
Igy mukodik by design.
Jól látszik , ha a snapshotokat megnézed. Minden datasetnek önálló snapsotja van, a "gyerek" dataset-nek is.
Kipróbálhatod, dataset gyökérben # cd .zfs (zfs rejtett könyvtárban lesznek a snapsotok).
https://blog.claryel.hu