Elkezdtem kb. két hete btrfs-t használni a NAS-ban, és ugyan tetszik és elégedett vagyok vele, de hozott magával pár buktatót.
A NAS tartalmáról több kisebb külső hdd-re készítek mentést időnként. Régen ez úgy ment, hogy a NAS-on hardlinkekkel és törléssel csökkentettem a duplikációt, és rsync-kel ment a másolás a backup diszkekre. Mindegyik backup diszkhez tartozott egy rsync parancs, ami néhány könyvtárat átmásolt (és közben figyelt a hardlinkekre).
Btrfs-en a blokk szintű deduplikációt próbálom belőni (még nincs kialakítva a végleges megoldás).
Azt észrevettem, hogy az rsync ezt nem kezeli, így vagy azt csinálom, hogy a backupra dedup nélkül másolok mindent, vagy rsync helyett mást használok. Erre mondta valaki, hogy btrfs send/receive.
send/receive-hez subvolume kell, nem tudok csak random könyvtárakat megadni, mint eddig. Ezzel csak az a gond, hogy subvolume-ok nem osztoznak az inode-okon (ibögökön :-D ), ezért hardlink nem megy mindenen át.
OK, akkor a subvolume-ok kialakítása után, de még az oda tartozó könyvtárak átmásolása előtt lekérdezem, hogy vannak-e olyan hardlinkek, amik ezeken a könyvtárakon kívül vannak, és amiket a mv eltörne. OK, ezeket akkor cp --reflink módon helyettesíteni tudom. Így nem nő meg az eddigi helyfoglalásom.
De most meg abba a problémába futottam bele, hogy 1) a du-nak fogalma sincs arról, hogy fájlok megosztoznak blokkokon, szóval egy reflinkkel másolt fájlt kétszer simán megszámol, és aztán behazudja nekem, hogy pl.
root@bananapi:/srv/dev-disk-by-id-dm-name-nas/gee/to-backup# du -h reflinktest/
316G reflinktest/
Miközben valójában a könyvtárban ugyanaz az egy darab 158G-s fájl van meg kétszer. Ami egyébként a könyvtáron kívül is megvan. Szóval nekem az lenne jó, ha ezt a könyvtárat kérdezem, akkor 158G-t mondjon, ha meg mondjuk egy könytár struktúrát számolok rekurzívan, akkor ha már egyszer megszámolta ezt a fájlt máshol, akkor ezt a könyvtárat 0-nak vegye.
Ahogy ezt hardlinkek esetén a du ügyesen le is kezeli.
Szóval egyfelől ha valaki tudja, hogy tudom egy fájl, egy könyvtár hierarchia vagy egy subvolume on-disk méretét lekérdezni, annak örülnék.
2) Ha reflinkkel másoltam egy fájlt, nem tudom, hogyan tudom meg róla, hogy osztozik blokkokon más fájlokkal - és ha igen, melyik fájlokkal. Illetve nem tudom, hogy van-e egyáltalán ilyen funkció, remélem, hogy igen.
Erre tud valaki megoldást?
Illetve ha van ötletetek, hogy lehetne ezt jobban, hatékonyabban vagy egyszerűbben csinálni, az is jöhet.
Egyelőre most ott tartok, hogy dobom az egész subvolume és btrfs send/receive koncepciót, mert sokat kell pl. az eltört hardlinkek egyenkénti kézzel helyettesítésével vacakolni, és akkor még jön a többi; megtartom, ami eddig volt, hardlinkek és rsync csak néhány könyvtárra, és ugyan a NAS-on lesz blokk szintű deduplikálás, a biztonsági másolatoknál nem, csak a hardlinkek lesznek, mert csak rsync-kel másolok. Így továbbra is tudom a du-t használni és látom előre, hogy belefér-e a kisebb backup hdd-re az, amit oda akarok másolni. Cserébe kb. 1TB-tal több tárhely kell a backup diszkeken, mint amennyit a NAS foglal majd a dedup után. :-(