Ritka fájl
Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt hozzászólók, és jelentősen eltérhet a 2017. január 26-án felülvizsgált
verziótól ; az ellenőrzések 7 szerkesztést igényelnek .
A ritka fájl olyan fájl , amelyben a nulla bájtos sorozatokat [1] az ezekre vonatkozó információkkal (a lyukak listájával) helyettesíti.
Lyuk ( angolul hole ) – a fájlon belüli nulla bájtokból álló sorozat, amely nincs lemezre írva . A lyukak információi (eltolódás a fájl elejétől bájtokban és bájtok számában) az FS metaadatokban tárolódnak .
Előnyök és hátrányok
Előnyök:
Hibák:
- rezsi a lyukak listájával való munkavégzéshez;
- fájlok töredezettsége, amikor az adatokat gyakran lyukakba írják;
- az adatok lyukakba írásának lehetetlensége szabad lemezterület hiányában;
- a lyukak egyéb mutatóinak a lehetetlensége, kivéve a null byte-okat.
Támogatás
A ritka fájlok támogatásának megvalósításához a következőkre lesz szüksége:
- a metaadatok rögzítésének képessége az FS-ben;
- rendszer- és alkalmazásszoftver támogatása.
A következő fájlrendszerek támogatják a ritka fájlokat: BTRFS , NILFS , ZFS , NTFS [2] , ext2 , ext3 , ext4 , XFS , JFS , ReiserFS , Reiser4 , UFS , Rock Ridge , UDF , ReFS , APFS , F2FS .
A következő szoftverek támogatják a ritka fájlokat:
Alkalmazás
Ritka fájlokat használnak tárolók tárolására , például:
Parancsok
Parancsok ritka fájlokkal való munkavégzéshez.
linux :
- 200 GB -os ritka fájl létrehozása :
dd
ha = /dev/nulla
= ./ritka fájl
bs = 1 szám = 0 keresés = 200G
# vagy
csonkolja az -s200G ./ritka fájlt
- normál fájl átalakítása ritka fájllá (lyukak keresése és helyük (eltolások és hosszok) rögzítése a fájl metaadataiban):
cp --sparse
= mindig ./simple-file ./sparse-file
- lemezmásolat mentése ritka fájlba a ddrescue segédprogrammal :
ddrescue --sparse /dev/sdb ./sparse-file ./history.log
ablakok :
- (nem ritka) 200 GB -os fájl létrehozása ( 214 748 364 800 bájt ) (a mérete bájtban van megadva):
fsutil fájl Createnew some-file 214748364800
- a "ritka" jelző beállítása (nem keres lyukakat a fájlban):
fsutil sparse setflag some-file
- a "ritka" zászló eltávolítása:
fsutil ritka setflag some-file 0
- a "ritka" jelző értékének lekérése:
fsutil ritka queryflag valamilyen fájlt
- egy fájlterület megjelölése lyukakként (az eltolás és a hossza bájtban van megadva):
fsutil ritka setrange some-file 0 214748364800
Jellemzők
- A lyukból való olvasás null byte-ot ad vissza; nincs lemezelérés (feltételezzük, hogy a területtérképeket már kiolvasták a lemezről a fájl metaadataiból, és a memóriában vannak).
- Amikor egy lyukba ír, elindul egy algoritmus, amely szabad helyet (szabad blokkokat) keres a lemezen. Ha blokkokat talál, az adatok kiírásra kerülnek. A gyakran talált blokkok a lemezen találhatók, távol a már megírt fájltartalommal rendelkező blokkoktól; ez az FS töredezettségéhez vezet. Ha elfogy a lemezterület, az algoritmus nem talál semmit, és az írás nem történik meg ( a write() szabad hely hiányát jelzi, ha pedig a fájlt mmap() -al használták , akkor szegmentációs hiba lép fel .
- Ha egy ritka fájl tetszőleges helyére ír, az általában nagy FS-töredezettséghez vezet.
- A ritka fájlok másolása nem mindig megfelelő; fájl másolásakor a lyukak információi helyett null bájtok írhatók a lemezre. Linux esetén a megfelelő másolást a cp parancs hajtja végre a --sparse kapcsolóval . Két módja van a megfelelő másolás megvalósításának: 1) meg kell keresni a null bájtokkal (lyukak) töltött területeket, és végrehajtani a seek() műveletet (ahelyett, hogy nullákat írna a write() billentyűvel ); 2) a fibmap() segítségével készítsünk egy térképet a fájl helyéről a lemezen .
- Egy fájl tetszőleges régiójának lyukként való megjelölését a fallocate() rendszerhívás a lyukasztás [3] jelzővel („lyukasztás”) lehetővé teszi. A rendszerhívás nemcsak lemezterületet szabadít fel, hanem a TRIM parancsot is végrehajtja az SSD -n a megadott terület blokkjaira.
- Mivel a legtöbb FS-ben a címzés blokkokkal [4] történik , a lyukak eltolása és mérete nem lehet tetszőleges, hanem a blokk méretének többszörösének kell lennie (a blokk méretéhez igazítva). A blokk mérete egy partíciónál állandó . Így lehetetlen "lyukat" csinálni néhány bájton; egy ilyen kísérletnél az FS illesztőprogram null byte-ot ír a lemezre.
- A fájlméret megjelenítésére szolgáló segédprogramok általában a fájl tényleges méretét (bájtban) és a lemezen lévő fájl méretét (FS blokkokban [4] vagy bájtokban) jelenítik meg. Egy ritka fájl kevesebb lemezterületet foglalhat el.
- Ne feledje, hogy a fallocate() rendszerhívás a 0-ás jelzővel blokkokat foglal le a fájl számára, és „nulla bájttal töltött”-ként jelöli meg őket. Ezzel szinte azonnal létrehozhat egy nagy fájlt anélkül, hogy null byte-ot írna a lemezre. A különbség a ritka fájloktól a blokkfoglalás; a fájl blokkjai azonnal kiosztásra kerülnek; a blokkba íráskor a „nulla bájttal megtöltött” jelző eltávolításra kerül; ha a lemezen elfogy a szabad hely, akkor nem lesz hiba, ha null byte-ot tartalmazó területre ír. Ebben az esetben az SSD-meghajtók TRIM parancsa is meghívásra kerül.
Jegyzetek
- ↑ A null byte olyan bájt , amelynek minden bitje nullára van állítva (0, NUL vagy '\0' a C -ben ).
- ↑ Ritka fájlok NTFS-ben . Letöltve: 2011. április 6. Az eredetiből archiválva : 2012. március 15.. (határozatlan)
- ↑ FALLOC_FL_PUNCH_HOLE. Cm.férfi 2 esküdt
- ↑ 1 2 Különböző FS-ek esetén a „blokk” neve másképp történik: „cluster” ( angol cluster ) az NTFS -ben, „block” ( angol blokk ) az ext4 -ben .