Apakah ada cara untuk membuat sistem file-ext menggunakan lebih sedikit ruang untuk Linux?

48

Saya memiliki banyak HDD eksternal dan internal yang saya gunakan pada sistem Linux. Saya hanya memiliki sistem Linux, jadi menggunakan sistem file Linux hanya akan masuk akal, bukan? Namun saya saat ini menggunakan NTFS di mana-mana, karena itu memberi saya ruang yang paling dapat digunakan dari HDD.

Saya ingin beralih ke sistem file Linux sekarang, sebagian besar karena izin dan kompabilitas (misalnya saya tidak bisa mendapatkan partisi NTFS terenkripsi LUKS saya untuk mengubah ukuran di Linux, terus mengatakan kepada saya untuk chkdsk di Windows).

Namun ketika saya memformat HDD tersebut, saya mencoba banyak filesystem yang berbeda dan setiap filesystem Linux, bahkan ext2 yang sejauh yang saya tahu tidak memiliki penjurnalan, menggunakan banyak ruang untuk dirinya sendiri. Saya tidak ingat nilai yang tepat, tetapi lebih dari 100GB NTFS membuat saya lebih banyak menggunakan HDD 2TB, yang banyak.

Jadi pertanyaan saya adalah: Apakah ada cara untuk membuat sistem file-ext menggunakan lebih sedikit ruang untuk diri mereka sendiri? Atau adakah filesystem lain (saya sudah mencoba ext2, ext3, ext4, NTFS dan vfat - Tidak ada satupun yang bahkan mendekati ruang yang dapat digunakan oleh NTFS yang ditawarkan kepada saya) dengan dukungan Linux yang sempurna dan ruang yang dapat digunakan?

Saya ingin mendengar tentang bagaimana dan mengapa filesystem (terutama ext2 yang tidak memiliki penjurnalan) menggunakan lebih banyak ruang daripada NTFS dan saya tidak tahu harus bertanya ke mana lagi. Sebagian besar saya lebih suka cara menggunakan ext4 tanpa penjurnalan dan hal lain yang menghabiskan banyak ruang, jika itu mungkin.

konfeti
sumber
1
Pernahkah Anda melihat utas ini ?
JakeGould
4
Saya sudah, dan itu menjelaskan apa yang menggunakan ruang ekstra tetapi perbedaan antara NTFS dan ext JAUH lebih besar daripada antara reiserfs dan ext, dan saya bertanya-tanya apakah ada cara untuk membuatnya lebih kecil. Sebagai contoh pada HDD 1TB saya dapat menggunakan 989GB dengan NTFS. ext4 akan memberi saya sekitar 909GB.
confetti
Cukup adil. Pertanyaan yang layak dan jawabannya juga mencerahkan.
JakeGould
3
bagaimana Anda benar-benar mengukur ruang apa yang tersedia? ini penting karena tergantung pada nilai apa yang Anda lihat Anda mungkin atau mungkin tidak melihat efek dari reservasi 5% misalnya seperti yang dinyatakan dalam pertanyaan terkait
eMBee
2
Perlu diingat bahwa penjurnalan pada sistem file seperti ext3 dan ext4 adalah hal yang baik. Sangat mudah untuk kehilangan daya ke drive eksternal atau mencabutnya secara tidak sengaja jika itu USB, Ketika itu terjadi, sering kali bukan masalah besar karena ia menyembuhkan dirinya sendiri menggunakan jurnal ketika mulai kembali. Tanpa jaring pengaman itu, segalanya akan jauh lebih buruk. Ini bukan hanya kasus lebih banyak lebih baik.
Joe

Jawaban:

97

Secara default, ext2 dan penggantinya cadangan 5% dari sistem file untuk digunakan oleh pengguna root. Ini mengurangi fragmentasi, dan kecil kemungkinannya bahwa administrator atau daemon yang dimiliki root tidak akan memiliki ruang untuk bekerja.

Blok yang dicadangkan ini mencegah program tidak berjalan sebagai root dari mengisi disk Anda. Apakah pertimbangan ini membenarkan hilangnya kapasitas tergantung pada apa sistem file digunakan.

Jumlah 5% ditetapkan pada 1980-an ketika disk jauh lebih kecil, tetapi hanya dibiarkan apa adanya. Saat ini 1% mungkin cukup untuk stabilitas sistem.

Pemesanan dapat diubah menggunakan -mopsi tune2fsperintah:

tune2fs -m 0 /dev/sda1

Ini akan mengatur persentase blok yang dicadangkan menjadi 0% (0 blok).

Untuk mendapatkan nilai saat ini (antara lain), gunakan perintah:

tune2fs -l <device> 
harrymc
sumber
10
Ini akan menjelaskan perbedaan besar dalam ruang yang dapat digunakan dengan sempurna (karena 5% dari 2TB adalah 100GB). Disk tidak akan digunakan untuk apa pun yang terkait dengan root atau sistem-file, jadi saya pikir ini akan menghemat untuk menonaktifkan ini. Saya mendapat pertanyaan: Bagaimana program yang dimiliki root tahu ada lebih banyak ruang kosong daripada program non-root? Berjalan dfsebagai non-root vs root tidak menunjukkan perbedaan.
confetti
12
@ confetti: Karena VFS tidak menolak upaya mereka untuk menulis ke disk dengan kesalahan (sampai volume sebenarnya penuh, tentu saja).
Ignacio Vazquez-Abrams
1
tune2fs -l <device>harus memberikan nilai ini antara lain. Jumlah 5% ditetapkan pada 1980-an ketika disk jauh lebih kecil, tetapi hanya dibiarkan apa adanya. Saat ini 1% mungkin cukup untuk stabilitas sistem.
harrymc
7
XFS menyimpan yang lebih kecil dari 5% atau 8192 blok (32 MiB), sehingga jumlah yang dipesan umumnya kecil dibandingkan dengan ukuran sistem file.
Michael Hampton
5
Terima kasih banyak semuanya atas penjelasannya. Ini sangat membantu saya memahami. Disk saya digunakan untuk mengisi sepenuhnya ke byte terakhir sebelumnya, namun sistem saya tidak gagal sepenuhnya, sekarang saya mengerti mengapa.
confetti
3

jika data yang Anda ingin simpan di dalamnya kompresibel, btrfs yang dipasang dengan compress=zstd(atau compress-force=zstd) kemungkinan besar akan menggunakan ruang disk yang jauh lebih sedikit daripada ext *

  • ini akan membuat btrf kompres data Anda secara transparan sebelum menulisnya ke disk, dan dekompres secara transparan saat membacanya kembali. juga, ext4 pra-alokasikan semua inode pada pembuatan filesystem, btrfs membuatnya sesuai kebutuhan, saya kira itu mungkin menghemat beberapa ruang juga.
hanshenrik
sumber
1
Apakah Anda keberatan menambahkan lebih banyak informasi ke jawaban ini? (Cara kerjanya, apa fungsinya, mungkin referensi, ...)
confetti
@ confetti menyukai ini? patchwork.kernel.org/patch/9817875
hanshenrik
Saya sangat menyukai ide ini, tetapi lebih banyak informasi tentang bagaimana ini akan berdampak pada kecepatan dan kinerja dan itu akan menyenangkan.
confetti
2
@ confetti, karena Anda menggunakan hard drive, itu mungkin akan meningkatkan kinerja. CPU jauh lebih cepat daripada hard drive sehingga bagian yang lambat dari akses disk adalah mendapatkan dan mematikan data; waktu yang dihabiskan untuk mengompresi atau mendekompresi tidak akan terlihat.
Markus
2
Di sisi lain, sebagian besar jenis file besar saat ini (misalnya gambar, audio, video, bahkan sebagian besar format dokumen teks) cenderung sudah dikompresi, dan umumnya tidak mendapat manfaat dari kompresi tambahan. Setidaknya bukan jenis tujuan umum sederhana yang dilakukan pada tingkat filesystem.
Ilmari Karonen
3

Poin lain yang belum dibicarakan adalah jumlah inode yang Anda pesan pada sistem file Anda.

Per default, mkfs menciptakan sejumlah inode yang seharusnya memungkinkan untuk menempatkan banyak file yang sangat kecil ke dalam sistem file Anda. Jika Anda tahu bahwa file akan sangat besar dan Anda hanya akan meletakkan sejumlah kecil file di FS, Anda dapat mengurangi jumlah inode.

Hati hati! Angka ini (lihat perbandingan antara ruang dan jumlah inode) hanya dapat diatur pada waktu pembuatan sistem file. Bahkan ketika memperpanjang FS, rasionya tetap sama.

glglgl
sumber
Atau, jika Anda tahu Anda akan menyimpan banyak file yang sangat kecil, Anda dapat menambah jumlah inode dan mengurangi ukuran blok sehingga Anda tidak membuang banyak ruang. (Setiap file harus mengkonsumsi minimal satu blok, bahkan jika itu 1 byte. Gunakan ls -l untuk membandingkan ukuran vs apa yang digunakan pada disk.)
Perkins
@ Perkins Anda benar, tapi saya pikir ini hanya berlaku untuk file yang SANGAT kecil: ukuran blok default adalah 4kiB (IIRC), yang minimum adalah 1 kiB. Jadi tidak terlalu banyak untuk menang, kecuali disk Anda benar-benar penuh dengan file-file itu. Namun demikian, saya mungkin akan menyelami ini besok.
glglgl
2
atau alternatifnya gunakan btrfs, yang membuat inode sesuai kebutuhan. sedangkan inode ext4 dialokasikan pada waktu pembuatan sistem file dan tidak dapat diubah ukurannya setelah pembuatan, dengan batas keras 4 miliar, inode btrf dibuat secara dinamis sesuai kebutuhan, dan batas kerasnya adalah 2 ^ 64, sekitar 18,4 triliun, sekitar 4,6 miliar kali lebih tinggi dari batas keras ext4
maksimal
Mengingatkan saya pada pengaturan spool usenet. ext4 akan menyimpan tiny (batasnya 60-160 byte tergantung banyak hal) di dalam inode itu sendiri.
mr.spuratic
@hanshenrik Perhatikan bahwa Anda memiliki batasan bloksize yang sama pada btrfs (dengan beberapa cara tambahan untuk mengatasinya) sehingga Anda masih perlu tahu jenis file apa (besar atau kecil atau keduanya) yang akan Anda simpan dan simpan tune filesystem Anda sesuai jika Anda ingin memeras jumlah maksimum penyimpanan dari itu. Ketersediaan kompresi otomatis memang membantu sedikit jika Anda menyimpan data yang halus.
Perkins