GNU/Linux >> Znalost Linux >  >> Linux

Správci systému Linux chtějí vědět:Kam zmizelo místo na disku?

Hardwarová disparita:Právě jste si koupili pěkný nový 1 TB disk, ale vaše nástroje pro systémový disk Linuxu jej hlásí jako 977 GB. Hej, kam se podělo těch 23 GB?

Nikde a podle vašeho názoru buď stále je, nebo tam nikdy nebyl! Tento rozdíl pochází od výrobců disků a programátorů operačních systémů, kteří používají různé jednotky měření. Výrobci disků používají skutečné metrické míry, takže 1000 GB =1 TB. Ve světě počítačů však neoperujeme s mocninou 10, ale s mocninou dvou, takže pro nás 1024 GB =1 TB. Tento rozdíl v měrných jednotkách je rozdíl mezi 1 TB nebo 977 GB.

Páni, to je neuvěřitelně otravné! Nemluvě o tom, že není založeno na standardech, což je něco, o čem komunita open-source je, že? V počítačovém průmyslu v podstatě zneužíváme faktu, že 1024 se zatraceně blíží 1000. Jak však získáváme větší a větší soubory, paměť, jednotky, pakety atd., je tento rozdíl stále znatelnější.

Co je tedy třeba udělat? Mezinárodní normalizační orgány, jako je Mezinárodní elektrotechnická komise (IEC) a Mezinárodní organizace pro normalizaci (ISO), vytvořily měrnou jednotku, která zohledňuje rozdíl v použití mezi skutečnou metrikou a hrubou aproximací, kterou používáme při výpočtech. Zadejte GiB a TiB (ostatní menší a větší jednotky se řídí stejnou nomenklaturou). V podstatě 1024 GiB =1 TiB. To znamená, že si stále můžete koupit svůj 1 TB disk, ale diskové nástroje by to měly hlásit jako 977 GiB, aby se odráželo, že diskový nástroj používá pro měření faktor 1024, nikoli metrický faktor 1000.

Moderní verze nástrojů již tuto metodu začaly používat. Podívejte se například na můj fdisk výstup nástroje ze systému Red Hat Enterprise Linux 8.2 níže:

Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes

Zde je článek o binárním prefixu, pokud byste chtěli ještě více podrobností.

Nesrovnalost v souborovém systému

Níže uvedený obsah je založen na tradičním rozšířeném souborovém systému, který je nasazen na mnoha různých Linuxech, konkrétně ext4. Red Hat Enterprise Linux však nyní nasazuje XFS jako výchozí souborový systém. Na konci této části je konkrétní diskuse o tom, jak tato témata ovlivňují XFS. Prozatím se zaměřme na ext4.

Situace:Uživatel hlásí, že souborový systém je plný, ale když se podívám na volný disk (df ) výstup, vidím následující:

[root@somehost ~]# df -h
Filesystem             Size  Used  Avail  Use%  Mounted on
/dev/vdb1              991M  924M     0  100%  /mnt

Z výše uvedeného výstupu si všimnete, že Velikost je hlášena na 991 MB, ale Použito je 924 MB, zjevně není plná. Přesto, když uživatel spustí příkaz, aby spotřeboval více místa na disku, jako je dd příkaz, obdrží následující zprávu:

[user@somehost mnt]$ dd if=/dev/zero of=bigfile2
dd: writing to 'bigfile2': No space left on device

Pokud však používají touch k vytvoření souboru uvidí toto:

[user@somehost mnt]$ touch file3

[user@somehost mnt]$ ls
bigfile  file3  lost+found

Navíc, pokud root vytvoří soubor pomocí dd , funguje to bez problémů, jak je ukázáno níže:

[root@somehost mnt]# dd if=/dev/zero of=root-file count=100
100+0 records in
100+0 records out
51200 bytes (51 kB, 50 KiB) copied, 0.000748385 s, 68.4 MB/s

[root@somehost mnt]# ls
bigfile  file3  lost+found  root-file

Je jasné, že vytváření souborů je úspěšné pomocí dd or touch pokud jste root! Co se děje?

Důvod touch funguje to tak, že souborový systém nemá datové bloky pro ukládání obsahu souboru . Nicméně souborový systém má k dispozici spoustu inodů (ukazatelů souborů). To je potvrzeno použitím další možnosti s df příkaz:

[root@somehost mnt]# df -i
Filesystem             Inodes  IUsed   IFree IUse%  Mounted on
/dev/vdb1               65536     14   65522        1%  /mnt

touch příkaz vytvoří prázdný soubor, což znamená, že spotřebovává inode k uložení metadat souboru, ale nespotřebovává žádné související datové bloky.

Vytváření souborů uživatelem root funguje, protože souborový systém ext4 má vyhrazený prostor, ke kterému nemají neprivilegovaní uživatelé přístup. Pouze root nebo procesy vlastněné root mohou zapisovat soubory, které spotřebují toto místo na disku. U souborových systémů ext2, ext3 a ext4 můžete tato data, uložená v superbloku souborového systému, zkontrolovat pomocí tune2fs příkaz. Ve výstupu níže jsem odstranil většinu dat hlášených tune2fs abych mohl zobrazit celkový a rezervovaný prostor:

[root@somehost mnt]# tune2fs -l /dev/vdb1
tune2fs 1.45.4 (23-Sep-2019)
Filesystem volume name:   <none>
Last mounted on:          /mnt

<<< OUTPUT ABRIDGED >>>

Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              65536
Block count:              261888
Reserved block count:     13094
Free blocks:              253029
Free inodes:              65525
First block:              0
Block size:               4096

<< OUTPUT ABRIDGED>>

Ve výše uvedeném výstupu si všimněte Počet rezervovaných bloků parametr. Podle mkfs.ext4 manuálová stránka, toto výchozí nastavení je pět procent prostoru souborového systému. V tomto souborovém systému je to zhruba 51 MiB prostoru.

Počet rezervovaných bloků x Velikost bloku =množství v bytech
13094 x 4096 =53633024 bajtů

Poté můžete převést bajty až na KiB nebo MiB tak, že výsledné číslo vydělíte 1024, abyste převedli měrné jednotky, jak uznáte za vhodné. Zde je příklad:

53633024 bajtů / 1024 =52376 KiB
52376 KiB / 1024 =51,15 MiB

Souborový systém jako celek má zhruba 1 GiB, takže počet rezervovaných bloků pět procent by znamenalo rezervní blokový prostor zhruba 50 MiB.

Tato sada rezervovaných bloků je to, co root vlastněný dd slouží k ukládání dat ve výše uvedeném příkladu, který fungoval, zatímco uživatel nadále neukládal soubory do zdánlivě „plného“ systému souborů. Správci mohou použít tune2fs zvýšit nebo snížit počet rezervovaných bloků na souborovém systému. Pokud však toto množství zvýšíte, když je souborový systém aktivní, musí být k dispozici volné volné místo sousedící se stávající oblastí vyhrazeného bloku na disku, aby bylo možné nashromáždit více rezervovaných bloků. Obecně platí, že pokud chcete vyhradit více než výchozí nastavení, doporučuji to provést při formátování systému souborů pomocí možnosti mkfs.ext4 příkaz. Tento proces zajišťuje, že existuje adekvátní souvislý prostor pro přidělení požadovaného počtu rezervovaných bloků.

A konečně, v závislosti na souborovém systému, nástroji, který používáte ke kontrole souborového systému, nebo vašem distru, můžete vidět, že nástroje hlásí využití souborového systému větší než 100 %. Pokud byste viděli hlášení nástroje 102% využito, říká vám, že je spotřebováno 100 % uživatelsky dostupného místa na disku v souborovém systému a vy jste také spotřebovali některé z těchto rezervovaných bloků.

Tak co XFS? Dříve v této části jsem zmínil, že Red Hat Enterprise Linux 7 a 8 používají XFS jako svůj výchozí formát souborového systému. XFS využívá vyhrazené bloky, ale rezervuje méně než rozšířené formáty souborového systému a neumožňuje žádnému uživateli přístup k tomuto prostoru. Prostor je vyhrazen pro využití samotného souborového systému XFS. Protože vyhrazený prostor má jiný účel – umožnit souborovému systému využít prostor pro operace souborového systému a zakrýt prostor před systémem – je méně snadné podávat zprávy o používání utilit XFS. Přesto to lze provést pomocí kombinace xfs_info , podívat se na počet a velikost bloků, převést je na KiB a porovnat je s výstupem df .

Zabalit

Kde je tedy vaše „ztracené“ místo na disku? Skrývá se v různých měrných jednotkách používaných k hlášení kapacity disku. Způsob, jakým je tento prostor hlášen a využíván, se liší podle souborového systému a také podle nástrojů.

[ Chcete si vyzkoušet Red Hat Enterprise Linux? Stáhněte si ji nyní zdarma. ]


Linux
  1. Věděli jste, že ve vaší televizi máte Linux?

  2. Zkontrolujte místo na disku v Linuxu pomocí příkazů df a du

  3. Jak zjistit, kde je program v linuxu zaseknutý?

  1. Použijte df ke kontrole volného místa na disku v Linuxu

  2. Zkontrolujte použité místo na disku v systému Linux pomocí du

  3. Linux – Zpomalit kopírování disku/disku?

  1. Zkontrolujte volné místo na disku v Linuxu pomocí ncdu

  2. Určení využití disku v Linuxu pomocí příkazu „du“.

  3. testování nedostatku místa na disku v linuxu