Pertanyaan Mengapa filesystem ext tidak mengisi seluruh perangkat?


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

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

Jadi, apa perbedaan 1,5% ini? Mengapa itu terjadi dan apakah ada cara untuk membuat isi keseluruhan ext isi?

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 total ukuran FS, 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 blok root, 435G berubah menjadi 459G - ukuran penuh dari 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 / nol = / mnt / 1
dd: запись в «/ mnt / 1»: На устройстве кончилось место
975702649 + 0 записей считано
975702648 + 0 записей написано
 скопировано 499559755776 байт (500 GB), 8705,61 c, 57,4 MB / c

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

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

Maaf untuk bahasa rusia, tetapi saya telah menjalankannya di lokal default dan mengulangnya terlalu lama. Tidak masalah, output dd jelas.

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


7
2017-08-15 17:03


asal


Ada sejumlah overhead tertentu 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, untuk menjadikannya iklan yang kurang mencolok. - Hello71
Halo71, terima kasih atas sarannya. Situs web tidak terlalu penting, hanya untuk openid. - Ineu
Untuk catatan di masa mendatang, jika Anda ingin cepat program untuk menghasilkan dalam bahasa Inggris, gunakan LANG=C foo atau LC_ALL=C foo - Alan Pearce
Alan, baik, 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:


Ada dua alasan mengapa hal 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 sebuah manufaktur hard drive akan memanggil 1000 byte per kilobyte. Perbedaan ini cukup kecil untuk kilobyte, tetapi setelah Anda bangun hingga terabita, itu cukup signifikan. Seorang penulis OS akan memanggil 1099511627776 byte (2 ^ 40 byte) terabyte, dan produsen hard-drive akan memanggil 1000000000000 byte terabyte.

Dua cara berbicara yang berbeda tentang ukuran ini sering menyebabkan banyak kebingungan.

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

Kedua, df -h melaporkan berapa banyak ruang yang tersedia untuk Anda gunakan. Semua sistem file harus menulis informasi rumah tangga untuk melacak segala sesuatu untuk Anda. Informasi ini membutuhkan sebagian ruang pada drive Anda. Umumnya tidak banyak, tetapi beberapa. Itu juga menjelaskan 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 menikam jawab pertanyaan Anda ...

Sistem file yang berbeda menggunakan jumlah ruang yang berbeda untuk informasi housekeeping dan melaporkan penggunaan ruang tersebut dengan cara yang berbeda.

Misalnya, ext2 membagi disk ke dalam kelompok silinder. Kemudian pra-mengalokasikan ruang di setiap kelompok silinder untuk inode dan peta ruang kosong. ext3 melakukan hal yang sama karena pada dasarnya ini adalah ext2 + journal. Dan ext4 juga melakukan hal yang sama karena modifikasi yang cukup mudah (dan hampir mundur kompatibel) dari ext3. Dan karena overhead meta-data ini diperbaiki pada pembuatan filesystem atau pada ukuran, itu tidak dilaporkan sebagai ruang 'digunakan'. Saya menduga ini juga karena kelompok silinder meta-data berada di tempat yang tetap pada disk, dan begitu tersirat sebagai digunakan dan karenanya tidak ditandai atau diperhitungkan dalam peta ruang kosong.

Tetapi reiserfs tidak mengalokasikan terlebih dahulu metadata apa pun. Tidak ada batasan inode yang tetap pada pembuatan filesystem karena mengalokasikan semua inode on-the-fly seperti halnya dengan blok data. Itu, paling tidak, membutuhkan beberapa struktur yang menggambarkan direktori root dan peta ruang kosong. Jadi itu menggunakan ruang lebih sedikit ketika tidak ada apa-apa di dalamnya.

Tetapi ini berarti bahwa reiserfs akan mengambil lebih banyak ruang ketika Anda menambahkan file karena 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 menduga mereka melacaknya lebih seperti reiserfs. vfat khususnya tidak memiliki konsep inode sama sekali. Peta ruang bebasnya (ukuran yang ditetapkan pada pembuatan filesystem (tabel FAT yang terkenal)) menyimpan banyak data yang akan di-inode, dan entri direktori (yang secara dinamis dialokasikan) akan menyimpan sisanya.


18
2017-08-15 17:24



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


Serta masalah yang disebutkan Omnifarious, dengan ext2 / 3/4 sejumlah ruang tertentu disediakan untuk root - ruang yang disediakan ini tidak ditampilkan dalam output df.

Misalnya membuat filesystem 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 opsi blok yang dicadangkan (tune2fs's -m opsi menetapkan blok yang dicadangkan sebagai persentase, dan -r opsi menetapkan blok yang dicadangkan sebagai angka lurus dari 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 pada contoh di atas, bahkan saat masuk sebagai root df tidak menunjukkan ruang yang disediakan dalam hitungan "Tersedia". Ruang yang disediakan tidak ditampilkan dalam hitungan "Digunakan", baik yang masuk sebagai root atau pengguna yang kurang istimewa. Ini kadang-kadang dapat menyebabkan kebingungan ketika suatu sistem file hampir penuh jika Anda tidak mengharapkan kedua fakta ini.

Juga perhatikan itu tune2fs, meskipun namanya, relevan untuk ext3 dan ext4 filesystems serta yang ext2.


8
2017-08-15 17:52



Terima kasih atas jawabannya. Tidak, ini bukan tentang blok yang dipesan. Pertanyaan yang diperbarui. - Ineu


Tentang perbedaan antara filesystem, filesystem 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 banyak atau lebih sedikit blok untuk ruang yang sama, Anda memiliki lebih banyak atau lebih sedikit ruang "hilang". Juga, blok grup filesystem untuk menghindari fragmenting file dan setiap blok cluster memiliki identifier dari beberapa ukuran, sehingga lebih banyak atau lebih sedikit blok blok akan menggunakan ruang fisik yang berbeda pada disk. Jadi perbedaannya adalah bagaimana filesystem mengatur ruang fisik.

Ini dia deskripsi untuk ext2 dan Anda mungkin dapat menemukan sesuatu yang serupa untuk reiserfs tetapi saya tidak pernah menggunakannya sehingga saya tidak memilikinya.


0
2017-08-15 21:53



Reiserfs dan btrfs tidak biasa karena hampir semua informasi pembukuan dialokasikan secara dinamis. Hanya salinan superblok dan bitmap ruang kosong yang dialokasikan pada pengaturan filesystem. Tentu saja, ini berarti bahwa jumlah ruang yang sebenarnya tersedia untuk data kurang deterministik untuk sistem file ini. - Omnifarious
@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 btrfs itu bahkan lebih menarik. btrfs dapat mengimplementasikan RAID pada basis file individu, sehingga pelaporan ruang bebas yang tersedia bahkan lebih sulit untuk dijabarkan karena tidak bisa berasumsi bahwa akan ada sejumlah ruang ekstra yang digunakan per blok yang digunakan untuk data. Selain itu, memungkinkan salinan berbasis COW sangat murah, sehingga menulis blok di tengah file yang ada dapat mengalokasikan ruang. - Omnifarious
Dan bagaimana dengan XFS, JFS dan VFAT? Sulit untuk percaya fs primitif seperti FAT32 lebih dinamis daripada ext4. - Ineu
FAT32 juga memiliki blok yang disediakan untuk organisasi. Apa arti dari 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 maksimal adalah 4GB pada FAT32 dan 2TB pada ext3 (tidak yakin tentang ext4 tetapi harus setidaknya sama). - laurent