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:

Virheet:

Tuki

Harvatiedostojen tuen käyttöönotto edellyttää:

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 :

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

  1. Nollatavu on tavu , jonka kaikki bitit on asetettu nollaan (0, NUL tai '\0' C :ssä ).
  2. Harva tiedostoja NTFS:ssä . Haettu 6. huhtikuuta 2011. Arkistoitu alkuperäisestä 15. maaliskuuta 2012.
  3. FALLOC_FL_PUNCH_HOLE. cm.mies 2 kaatua
  4. 1 2 Eri FS:ssä "lohkoa" kutsutaan eri tavalla: "cluster" ( englanniksi  cluster ) NTFS :ssä , "block" ( englanniksi  lohko ) ext4 :ssä .