Harva tiedosto
Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 26. tammikuuta 2017 tarkistetusta
versiosta . tarkastukset vaativat
7 muokkausta .
Harva tiedosto on tiedosto , jossa nollatavuiset sekvenssit [ 1] on korvattu näitä sekvenssejä koskevilla tiedoilla (reikien luettelo).
Hole ( englanniksi reikä ) - nollan tavun sarja tiedoston sisällä, jota ei kirjoiteta levylle . Tiedot reikistä (poikkeama tiedoston alusta tavuina ja tavujen lukumäärä) tallennetaan FS -metatietoihin .
Edut ja haitat
Edut:
- levytilan säästäminen. Harvaiden tiedostojen käyttöä pidetään yhtenä tapana pakata tietoja tiedostojärjestelmätasolla .
- ei aikaa kuluttaa nolla tavun kirjoittamiseen;
- pidentää tallennuslaitteiden käyttöikää .
Virheet:
- yläpuolella reikäluettelon kanssa työskentelemiseen;
- tiedostojen pirstoutuminen, kun tietoja kirjoitetaan usein reikiin;
- mahdottomuus kirjoittaa tietoja reikiin vapaan levytilan puuttuessa;
- mahdottomuus käyttää muita reikien indikaattoreita, paitsi nollatavuja.
Tuki
Harvatiedostojen tuen käyttöönotto edellyttää:
- kyky tallentaa metatietoja FS:ään;
- järjestelmä- ja sovellusohjelmistojen tuki.
Seuraavat tiedostojärjestelmät tukevat harvaa tiedostoa: BTRFS , NILFS , ZFS , NTFS [2] , ext2 , ext3 , ext4 , XFS , JFS , ReiserFS , Reiser4 , UFS , Rock Ridge , UDF , ReFS , APFS , F2FS .
Seuraavat ohjelmistot tukevat harvalukuisia tiedostoja:
Sovellus
Harvoja tiedostoja käytetään säiliöiden tallentamiseen , esimerkiksi:
Komennot
Komennot harvalukuisten tiedostojen käsittelyyn.
linux :
- luodaan 200 Gt :n harva tiedosto :
dd
jos = /dev/nolla
= ./harva-tiedosto bs
= 1 count = 0 seek = 200G #
tai
katkaista -s200G ./harva-tiedosto
- tavallisen tiedoston muuntaminen harvakseltaan (reikien etsiminen ja niiden sijainnin (poikkeamat ja pituudet) kirjaaminen tiedoston metatietoihin):
cp --sparse
= aina ./yksinkertainen tiedosto ./harva-tiedosto
- levykopion tallentaminen harvaan tiedostoon ddrescue- apuohjelmalla :
ddrescue --sparse /dev/sdb ./sparse-file ./history.log
ikkunat :
- luodaan (ei harva) 200 Gt tiedosto ( 214 748 364 800 tavua ) (koko on määritetty tavuina):
fsutil-tiedosto Createnew some-file 214748364800
- "harva"-lipun asettaminen (ei etsi reikiä tiedoston sisältä):
fsutil harva setflag jokin tiedosto
- "harvan" lipun poistaminen:
fsutil harva setflag some-file 0
- "harva"-lipun arvon saaminen:
fsutil harva queryflag jokin tiedosto
- tiedostoalueen merkitseminen reikiin (offset ja pituus ilmoitetaan tavuina):
fsutil sparse setrange some-file 0 214748364800
Ominaisuudet
- Lukeminen reiästä palauttaa nollatavua; levykäyttöä ei ole (oletetaan, että aluekartat on jo luettu levyltä tiedoston metatiedoista ja ne ovat muistissa).
- Kun kirjoitetaan reikään, käynnistetään algoritmi, joka etsii vapaata tilaa (vapaita lohkoja) levyltä. Jos lohkoja löytyy, tiedot kirjoitetaan. Usein löydetyt lohkot sijaitsevat levyllä kaukana lohkoista, joissa on jo kirjoitettu tiedostosisältö; tämä johtaa FS:n pirstoutumiseen. Jos levytila loppuu, algoritmi ei löydä mitään eikä kirjoitusta suoriteta ( write() ilmoittaa vapaan tilan puutteesta ja jos tiedostoa käytettiin mmap() :n kanssa , tapahtuu segmentointivirhe ).
- Harvan tiedoston mielivaltaiseen sijaintiin kirjoittaminen johtaa yleensä suureen FS:n pirstoutumiseen.
- Harvatiedostoja ei aina kopioida oikein; tiedostoa kopioitaessa levylle voidaan kirjoittaa tyhjiä tavuja reikien sijaan. Linuxissa oikean kopioinnin suorittaa cp - komento ja --sparse . On kaksi tapaa toteuttaa oikea kopiointi: 1) etsiä alueita, jotka ovat täynnä nollatavuja (reikiä) ja suorittaa seek() (sen sijaan, että kirjoittaisit nolla-arvoja komennolla write() ); 2) Hanki kartta tiedoston sijainnista levyllä käyttämällä fibmap() .
- Jos haluat merkitä tiedoston mielivaltaisen alueen rei'äksi, fallocate() -järjestelmäkutsu leimausreikä [3] -lipulla ("punch a hole") sallii. Järjestelmäkutsu ei ainoastaan vapauta levytilaa, vaan myös suorittaa TRIM-komennon SSD -levyillä määritetyn alueen lohkoille.
- Koska osoitus useimmissa FS:ssä suoritetaan lohkojen [4] avulla, reikien siirtymä ja koko eivät voi olla mielivaltaisia, vaan niiden on oltava lohkokoon kerrannainen (kohdistettu lohkon koon mukaan). Lohkon koko on vakio yhden osion osalta . Näin ollen on mahdotonta tehdä "reikä" pariin tavuun; tällaisessa yrityksessä FS-ohjain kirjoittaa nollatavuja levylle.
- Tiedostokoon näyttämiseen tarkoitetut apuohjelmat näyttävät yleensä tiedoston todellisen koon (tavuina) ja levyllä olevan tiedoston koon (FS-lohkoina [4] tai tavuina). Harva tiedosto voi viedä vähemmän levytilaa.
- Huomaa, että fallocate() -järjestelmäkutsu lipulla 0 varaa tiedostolle lohkot ja merkitsee ne "täytetyiksi nollatavuilla". Tämän avulla voit luoda suuren tiedoston lähes välittömästi kirjoittamatta nollatavua levylle. Ero harvoista tiedostoista on lohkovaraus; tiedoston lohkot allokoidaan välittömästi; kirjoitettaessa lohkoon lippu "täytetty nolla tavulla" poistetaan; jos levyltä loppuu vapaa tila, virhettä ei tapahdu kirjoitettaessa alueelle, joka sisältää nollatavuja. SSD-asemien TRIM -komentoa kutsutaan myös tässä tapauksessa .
Muistiinpanot
- ↑ Nollatavu on tavu , jonka kaikki bitit on asetettu nollaan (0, NUL tai '\0' C :ssä ).
- ↑ Harva tiedostoja NTFS:ssä . Haettu 6. huhtikuuta 2011. Arkistoitu alkuperäisestä 15. maaliskuuta 2012. (määrätön)
- ↑ FALLOC_FL_PUNCH_HOLE. cm.mies 2 kaatua
- ↑ 1 2 Eri FS:ssä "lohkoa" kutsutaan eri tavalla: "cluster" ( englanniksi cluster ) NTFS :ssä , "block" ( englanniksi lohko ) ext4 :ssä .