Mengapa ext filesystems tidak mengisi seluruh perangkat?

8

Saya baru saja memperhatikan sistem file ext {2,3,4} yang saya coba buat pada HDD 500G tidak menggunakan semua ruang yang tersedia (466G). Saya juga sudah mencoba reiser3, xfs, jfs, btrfs dan bahkan vfat. Semuanya membuat fs ukuran 466G (seperti yang ditunjukkan oleh df -h ). Namun, ext * menciptakan fs 459G. Menonaktifkan blok yang dipesan menambah ruang yang tersedia bagi pengguna, tetapi ukuran fs masih 459G.

Hal yang sama untuk HDD 1Tb: 932G reiserfs, 917G ext4.

Jadi, apa perbedaan 1,5% ini? Mengapa itu terjadi dan adakah cara untuk membuat ext mengisi seluruh volume?

UPD: Semua tes dilakukan pada mesin yang sama, pada HDD yang sama dll. Tidak masalah bagaimana 466G berbeda dari pemasaran 500G. Masalahnya berbeda untuk FS yang berbeda.

Tentang df - ini menunjukkan ukuran FS total, ukuran yang digunakan dan ruang kosong. Dalam hal ini saya punya:

untuk reiserfs:

/ dev / sda1 466G 33M 466G 1% / mnt

untuk ext4:

/ dev / sda1 459G 198M 435G 1% / mnt

Jika saya mematikan reservasi root block, 435G berubah menjadi 459G - ukuran penuh fs (minus 198M). Tapi fs sendiri masih 459G untuk ext4 dan 466G untuk reiser!

UPD2: Mengisi volume dengan data nyata melalui dd:

reiserfs:

fs: ~ # dd if = / dev / zero of = / mnt / 1
dd: запись в «/ mnt / 1»: На устройстве кончилось место
975702649 + 0 записей считано
975702648 + 0 записей написано
 скопировано 499559755776 байт (500 GB), 8705,61 c, 57,4 MB / c

ext2 dengan blok reservasi dimatikan (mke2fs -m 0):

fs: ~ # dd if = / dev / zero of = / mnt / 1
dd: запись в «/ mnt / 1»: На устройстве кончилось место
960356153 + 0 записей считано
960356152 + 0 записей написано
 скопировано 491702349824 байта (492 GB), 8870,01 c, 55,4 MB / c

Maaf untuk bahasa Rusia, tapi saya sudah menjalankannya di lokal default dan mengulanginya terlalu lama. Tidak masalah, output dd jelas.

Jadi, ternyata mke2fs benar-benar menciptakan filesystem yang lebih kecil, daripada mkfs lainnya.

Ineu
sumber
2
Ada sejumlah overhead dengan setiap FS ... saya tidak tahu satu thats akan memungkinkan Anda untuk memiliki akses ke semua ruang fisik yang tersedia pada disk.
prodigitalson
Saya sarankan Anda mengubah nama tampilan Anda dan meletakkan apa yang tampaknya menjadi blog Anda di bidang situs web profil Anda, agar iklan tidak terlalu mencolok.
Hello71
1
Hello71, terima kasih atas sarannya. Situs web tidak terlalu penting, itu hanya untuk openid.
Ineu
Sebagai catatan di masa depan, jika Anda ingin sebuah program diproduksi dalam bahasa Inggris dengan cepat, gunakan LANG=C fooatauLC_ALL=C foo
Alan Pearce
Alan, benar, terima kasih. Bahkan bisa LANG = atau LANG = POSIX. Tapi seperti yang saya katakan, proses ini membutuhkan banyak waktu sehingga menjalankannya kembali dengan lokal yang berbeda hanya untuk beberapa baris tidak masuk akal :) Dalam kedua kasus, itu membuktikan masalah dengan ukuran FS untuk ext2 :(
Ineu

Jawaban:

19

Ada dua alasan mengapa ini benar.

Pertama, untuk beberapa alasan atau penulis OS lain masih melaporkan ruang kosong dalam hal sistem basis 2, dan produsen hard drive melaporkan ruang kosong dalam hal sistem basis 10. Sebagai contoh, seorang penulis OS akan memanggil 1024 byte (2 ^ 10 byte) satu kilobyte, dan seorang pembuat hard drive akan memanggil 1000 byte per kilobyte. Perbedaan ini sangat kecil untuk kilobyte, tetapi begitu Anda mencapai terabyte, itu cukup signifikan. Seorang penulis OS akan memanggil 1099511627776 byte (2 ^ 40 byte) terabyte, dan produsen hard drive akan menyebut 1000000000000 byte byte terabyte.

Dua cara berbeda berbicara tentang ukuran ini sering kali menimbulkan banyak kebingungan.

Ada awalan ISO yang didukung penuh untuk ukuran biner . Antarmuka pengguna yang dirancang dengan awalan baru dalam pikiran akan menunjukkan TiB, GiB (atau lebih umum XiB) ketika menunjukkan ukuran dengan sistem awalan basis 2.

Kedua, df-h melaporkan berapa banyak ruang yang tersedia untuk Anda gunakan. Semua sistem file harus menulis informasi tata graha untuk melacak hal-hal untuk Anda. Informasi ini memakan sebagian ruang pada drive Anda. Umumnya tidak terlalu banyak, tetapi beberapa. Itu juga merupakan beberapa kerugian yang Anda lihat.

Setelah Anda mengedit posting Anda untuk memperjelas bahwa tidak ada jawaban saya yang benar-benar menjawab pertanyaan Anda, saya akan coba menjawab pertanyaan Anda ...

Sistem file yang berbeda menggunakan jumlah ruang yang berbeda untuk informasi tata graha dan melaporkan penggunaan ruang dengan cara yang berbeda.

Sebagai contoh, ext2 membagi disk menjadi kelompok-kelompok silinder. Kemudian ia mengalokasikan ruang di setiap grup silinder untuk inode dan peta ruang bebas. ext3 melakukan hal yang sama karena itu pada dasarnya ext2 + penjurnalan. Dan ext4 juga melakukan hal yang persis sama karena ini merupakan modifikasi ext3 yang cukup mudah (dan hampir kompatibel). Dan karena overhead meta-data ini diperbaiki pada pembuatan sistem file atau pada ukuran, itu tidak dilaporkan sebagai ruang 'bekas'. Saya menduga ini juga karena meta-data grup silinder berada di tempat-tempat tetap pada disk, dan dengan demikian tersirat digunakan dan karenanya tidak ditandai atau diperhitungkan dalam peta ruang bebas.

Tetapi reiserfs tidak mengalokasikan sebelumnya metadata apa pun. Ia tidak memiliki batas inode yang diperbaiki pada pembuatan sistem file karena ia mengalokasikan semua inode-nya secara langsung seperti halnya dengan blok data. Paling-paling membutuhkan beberapa struktur yang menggambarkan direktori root dan semacam peta ruang bebas. Jadi ia menggunakan lebih sedikit ruang ketika tidak ada apa-apa di dalamnya.

Tetapi ini berarti bahwa reiserfs akan memakan lebih banyak ruang saat Anda menambahkan file karena itu akan mengalokasikan meta-data (seperti inode) serta ruang data aktual untuk file tersebut.

Saya tidak tahu persis bagaimana jfs dan btrfs melacak penggunaan ruang meta-data. Tapi saya curiga mereka melacaknya lebih seperti yang dilakukan reiserf. vfat secara khusus tidak memiliki konsep inode sama sekali. Peta ruang bebasnya (ukurannya diperbaiki pada filesystem create (tabel FAT yang terkenal)) menyimpan banyak data yang akan diinode oleh inode, dan entri direktori (yang dialokasikan secara dinamis) menyimpan sisanya.

Beraneka ragam
sumber
2
Ada standar ISO untuk itu: en.wikipedia.org/wiki/Binary_prefix
Bobby
@ Bob - Ya, dan itu mulai muncul di layar. Saya akan menambahkan itu ke jawaban saya. Terima kasih!
Mahakuasa
8

Seperti halnya masalah yang disebutkan oleh Omnifarious, dengan ext2 / 3/4 sejumlah ruang dicadangkan untuk root - ruang yang dipesan ini tidak ditampilkan dalam output df.

Misalnya membuat sistem file kecil (~ 100mb) dengan opsi default, menggunakan ext2 daripada 3 atau 4 untuk mengabaikan ruang yang seharusnya diambil oleh jurnal:

swann:/tmp# dd if=/dev/zero of=./loop.fs bs=10240 count=10240
swann:/tmp# mkfs.ext2 loop.fs
swann:/tmp# mkdir loop
swann:/tmp# mount -text2 -oloop loop.fs loop
swann:/tmp# df loop
Filesystem           1K-blocks      Used Available Use% Mounted on
/tmp/loop.fs             99150      1550     92480   2% /tmp/loop

Tweak pilihan dicadangkan blok ( tune2fs's -mpilihan set blok dicadangkan sebagai persentase, dan -rpilihan set blok dicadangkan sebagai sejumlah lurus blok):

swann:/tmp# umount loop
swann:/tmp# tune2fs -m 25 loop.fs
swann:/tmp# mount -text2 -oloop loop.fs loop
swann:/tmp# df loop
Filesystem           1K-blocks      Used Available Use% Mounted on
/tmp/loop.fs             99150      1550     72000   3% /tmp/loop

swann:/tmp# umount loop
swann:/tmp# tune2fs -m 0 loop.fs
swann:/tmp# mount -text2 -oloop loop.fs loop
swann:/tmp# df loop
Filesystem           1K-blocks      Used Available Use% Mounted on
/tmp/loop.fs             99150      1550     97600   2% /tmp/loop

Seperti yang Anda lihat dalam contoh di atas, bahkan ketika login sebagai root dftidak menunjukkan ruang yang dicadangkan dalam hitungan "Tersedia". Ruang yang dicadangkan tidak muncul dalam hitungan "Bekas", apakah masuk sebagai root atau pengguna yang kurang beruntung. Ini kadang-kadang dapat menyebabkan kebingungan ketika sistem file hampir penuh jika Anda tidak mengharapkan dua fakta ini.

Juga perhatikan bahwa tune2fs, terlepas dari namanya, relevan untuk sistem file ext3 dan ext4 serta yang ext2.

David Spillett
sumber
Terima kasih atas jawabannya. Tidak, ini bukan tentang blok yang dipesan. Pertanyaan diperbarui.
Ineu
0

Tentang perbedaan antara sistem file, sistem file yang berbeda mengatur blok secara berbeda dan membutuhkan lebih banyak atau lebih sedikit data untuk mengidentifikasi dan melacak blok. Ukuran blok juga membuat perbedaan seolah-olah Anda memiliki lebih atau kurang blok untuk ruang yang sama, Anda memiliki lebih banyak atau lebih sedikit "kehilangan" ruang. Juga, grup sistem file blok untuk menghindari fragmen file dan setiap cluster blok memiliki pengidentifikasi beberapa ukuran, sehingga lebih atau kurang blok cluster akan menggunakan ruang fisik yang berbeda pada disk. Jadi perbedaannya terletak pada bagaimana sistem file mengatur ruang fisik.

Berikut adalah deskripsi untuk ext2 dan Anda mungkin dapat menemukan sesuatu yang serupa untuk reiserfs tetapi saya tidak pernah menggunakannya jadi saya tidak punya.

laurent
sumber
2
Reiserf dan btrf tidak biasa karena hampir semua informasi pembukuan dialokasikan secara dinamis. Hanya salinan superblok dan bitmap ruang bebas yang dialokasikan pada pengaturan sistem file. Tentu saja, ini berarti bahwa jumlah aktual ruang yang tersedia untuk data kurang deterministik untuk sistem file ini.
Mahakuasa
@Omnifarious +1 - Jadi, jika saya mengerti dengan baik tentang reiserfs dan btrfs, ruang yang tersedia dilaporkan lebih besar di awal tetapi akan digunakan baik dengan data dan info pembukuan bukan hanya data, kan?
laurent
@ laurent-rpnet - Ya, itu benar. Dalam kasus btrf bahkan lebih menarik. btrfs dapat mengimplementasikan RAID pada basis file individual, sehingga pelaporan ruang kosong yang tersedia lebih sulit untuk dijabarkan karena tidak dapat mengasumsikan akan ada sejumlah ruang tambahan yang digunakan per blok yang digunakan untuk data. Selain itu, ini memungkinkan salinan berbasis SAP yang sangat murah, jadi menulis blok di tengah file yang ada dapat mengalokasikan ruang.
Mahakuasa
Dan bagaimana dengan XFS, JFS dan VFAT? Sulit untuk percaya fs primitif seperti FAT32 lebih dinamis daripada ext4.
Ineu
FAT32 juga memiliki blok yang dicadangkan untuk organisasi. Apa arti dinamika di sini? Jika alokasi dinamis, FAT32 tidak memiliki alokasi dinamis, seperti ext dan juga tidak menunjukkan semua blok pada disk yang tersedia untuk data. Ini juga memiliki beberapa keterbatasan filesystem ext4 tidak memiliki seperti tidak ada sistem perizinan sementara ext4 memiliki izin POSIX dan ACL dan ukuran file maks adalah 4GB pada FAT32 dan 2TB pada ext3 (tidak yakin tentang ext4 tetapi harus setidaknya sama).
laurent