Minun on pitänyt suorittaa btrfs balance
yhden laitteen tiedostojärjestelmässäni, kun sain ENOSPC
vaikka vapaata tilaa oli todella.
Miksi tämä on suoritettava?
Mitä saldo todella tekee?
vastaus
Toisin kuin useimmat tavanomaiset tiedostojärjestelmät, BTRFS käyttää kaksivaiheista allokaattoria. Ensimmäinen vaihe varaa suuret avaruusalueet, jotka tunnetaan paloina tietyntyyppisille tiedoille , sitten toinen vaihe jakaa lohkot tavallisen tiedostojärjestelmän tavoin näille suuremmille alueille. Paloja on kolme erilaista:
-
Tietopalat: Nämä tallentavat säännöllisiä tiedostotietoja.
-
Metatietojen palat: Nämä tallentavat tiedostojen metatietoja, mukaan lukien muun muassa aikaleimat, tarkistussummat, tiedostonimet, omistajuuden, käyttöoikeudet ja laajennetut määritteet.
-
Järjestelmän palat: Nämä ovat erityinen palatyyppi, joka tallentaa tietoja siitä, missä kaikki muut palat sijaitsevat.
Vain sellaiset tiedot, joille osa on varattu, voidaan tallentaa kyseiseen osaan. Yleisin tapaus näinä päivinä, kun BTRFS-tiedostossa esiintyy -ENOSPC -virhe, on, että tiedostojärjestelmässä ei ole tilaa tiedoille tai metatiedoille olemassa olevissa paloissa, eikä se voi kohdistaa uutta osaa. Voit varmistaa, että näin on käynnissä btrfs fi df
virheen heittäneessä tiedostojärjestelmässä. Jos data- tai metatiedot-rivillä näkyy summa-arvo, joka eroaa merkittävästi käytetystä arvosta, tämä on todennäköisesti syy.
Mitä btrfs balance
tekee, on lähettää asiat takaisin allokaattorin kautta, minkä seurauksena palojen tilankäyttö tiivistetään. Jos sinulla on esimerkiksi kaksi metatietopalaa, jotka ovat molemmat 40% täynnä, tasapaino johtaa siihen, että niistä tulee yksi metatietopala, joka on 80% täynnä. Tiivistämällä näin tilankäyttö, vaakatoiminto pystyy poistamaan nyt tyhjät palat ja vapauttaa siten tilaa uusien palojen allokoinnille. Jos suoritat uudelleen btrfs fi df
tasapainon suorittamisen jälkeen, sinun pitäisi nähdä, että summa- ja käytetty-arvot ovat paljon lähempänä toisiaan, koska saldo poisti palaset, joita ei enää tarvittu.