inode, perbandingan ruang yang dikonsumsi untuk banyak file kecil (xfs, btrfs, ext4)


9

Saya memiliki partisi ext4 (LVM pada VM) dengan sejumlah besar file kecil , yang harus saya perpanjang setiap 3-4 bulan.

Mengenai jumlah ruang yang digunakan oleh inode.

Apakah salah satu dari sistem file xfs, btrfs atau ext4 menggunakan lebih sedikit ruang?

Dengan kata lain, apakah beralih ke btrfs atau xfs akan membuat partisi terisi dengan inode lebih lambat daripada dengan ext4?


jika Anda menggunakan ext4 dan berharap untuk menyimpan sebagian besar tipe kecil, Anda harus membuatnya dengan mkfs.ext4 -t newsuntuk hasil terbaik. Juga, saya sarankan pengujian - buat (pada lvm, atau perangkat loopback misalnya) masing-masing file filesems pada gilirannya, dan mulai menyalin file nyata Anda ke dalamnya sampai terisi. Ketika mengisi, lakukan df -i(atau find | wc -l) untuk menemukan yang berhasil menyimpan sebagian besar file Anda - dengan cara itu Anda akan tahu pasti.
Matija Nalis

1
@MatijaNalis, -Tdengan huruf kapital T. File config juga memiliki beberapa pilihan lain yang tampak berguna
ilkkachu

@ilkkachu benar, terima kasih. Seharusnyamkfs.ext4 -T news
Matija Nalis

Seberapa kecil file?
drudru

Jawaban:


6

Untuk memulai dengan pertanyaan pertama Anda: ya, salah satu sistem file ini menggunakan lebih sedikit ruang. Bahkan tanpa perincian lebih lanjut, tidak mungkin bahwa mereka semua menggunakan jumlah ruang yang sama, mengingat bahwa mereka memiliki implementasi yang berbeda. Jadi seseorang terikat untuk menggunakan ruang lebih sedikit daripada yang lainnya.

Btrfs memiliki alokasi inode dinamis, jadi tidak ada pengisian seperti yang Anda miliki dengan tabel inode untuk ext4 (ukuran yang ditetapkan pada waktu pembuatan sistem file ext4).

XFS bersifat dinamis dengan cara yang serupa, tetapi memiliki batas (persentase sistem file yang dapat digunakan untuk inode), jadi di sana, apakah Anda mengisi tunjangan inode Anda tergantung pada persentase yang ditetapkan serta jumlah file / ukuran file


Terima kasih atas balasan cepatnya! Sepertinya XFS adalah pilihan teraman untuk saat ini. Bisakah persentase penggunaan inode ini diubah secara dinamis? dan jika tidak, adakah cara untuk memprediksi berapa yang akan dibutuhkan?
abadys

1
Anda harus dapat melakukannya denganxfs_growfs -m XX
Anthon

3

Ya, dan ketahuilah bahwa semuanya tergantung pada kebutuhan Anda:

Btrfs (diucapkan sebagai Butter FS, Better FS, atau B-Tree FS)

Mempertimbangkan bahwa btrfs akan dapat menjangkau lebih dari beberapa hard drive, itu adalah hal yang sangat baik bahwa ia dapat mendukung ruang drive 16 kali lebih banyak daripada ext4 . Ukuran partisi maksimum sistem file btrfs adalah 16 exbibytes, serta ukuran file maksimum juga 16 exbibytes.

Jumlah File Maksimal: 2 ** 64

XFS

The XFS adalah kinerja tinggi 64-bit sistem journal berkas. XFS mendukung ukuran sistem file maksimum 8 exbibytes untuk sistem file 64-bit. Sekarang, RHEL 7.0 menggunakan XFS sebagai sistem file default, termasuk dukungan untuk menggunakan XFS untuk /bootpartisi.

Jumlah File Maksimal: 2 ** 64

EXT4

The ext4 terkenal karena membawa perbaikan kecepatan di atas ext3. Ext4 memiliki beberapa batasan. Ukuran file maksimum adalah 16 tebibytes (yang kira-kira 17,6 terabyte). Volume / partisi terbesar yang dapat Anda miliki dengan ext4 adalah 1 exbibyte. Seperti dalam sistem file yang paling modern, ini adalah sistem file penjurnalan yang berarti bahwa itu akan membuat jurnal di mana file-file tersebut terutama terletak pada disk dan dari setiap perubahan lain yang terjadi pada disk. Terlepas dari semua fitur-fiturnya, itu tidak mendukung kompresi transparan, enkripsi transparan, atau deduplikasi data. Snapshots didukung secara teknis, tetapi fitur seperti itu paling eksperimental.

Jumlah File Maksimal: 4 miliar

XFS vs Btrfs

XFS tidak memiliki RAID, sementara Btrfs RAID belum sepenuhnya stabil dan masih dalam masa awal. XFS lebih dan lebih dewasa daripada Btrfs , tetapi kami tidak dapat menyangkal bahwa Btrfs kuat dan FileSystem yang berkembang dengan baik.

Untuk saat ini, XFS adalah pilihan saya - khususnya karena ini adalah FS default pada RHEL 7 -, kecuali saya benar-benar membutuhkan Btrfs.


1
Ini memiliki beberapa informasi latar belakang yang baik pada sistem file secara umum, tetapi saya tidak melihat masalah spesifik dari file kecil yang disebutkan di sini.
ilkkachu

@ilkkachu "sejumlah besar file kecil" apa artinya? Ini semua tentang inode karena semua file dibuat melalui inode dan inode adalah struktur data yang digunakan untuk mewakili objek sistem file. Jadi saya pikir saya telah menjelaskan semua kebutuhan penulis, ditambah saya telah menyebutkan tentang jumlah file maksimum.
FarazX

2

Saya kira masalah yang Anda miliki bukanlah partisi yang diisi dengan inode per se, tetapi kehabisan jumlah inode di sistem file. ext4 menyimpan inode secara statis saat filesystem dibuat, tetapi Anda dapat mengatur angkanya dengan opsi menjadimkfs.ext4 :

-i bytes-per-inode
Tentukan rasio byte / inode. mke2fs membuat inode untuk setiap byte bytes-per-inode ruang pada disk. Semakin besar rasio byte-per-inode, semakin sedikit inode yang akan dibuat.

-N number-of-inode
Mengesampingkan perhitungan default dari jumlah inode yang harus disediakan untuk sistem file (yang didasarkan pada jumlah blok dan rasio byte-per-inode). Ini memungkinkan pengguna untuk menentukan jumlah inode yang diinginkan secara langsung.

Manual menyatakan secara eksplisit bahwa byte per rasio inode tidak dapat diubah setelah FS dibuat, tetapi jumlah total akan skala untuk memenuhi rasio jika FS diubah ukurannya.

Anda juga dapat mengatur ukuran setiap inode. Standarnya adalah 256 byte pada sistem file "kebanyakan", tetapi dapat dikurangi menjadi 128 (standar untuk sistem file "kecil"). Ruang ekstra digunakan untuk menyimpan atribut yang diperluas (mis. Label SELinux), jadi jika Anda tidak membutuhkannya, itu harus aman untuk mengurangi ukuran ke minimum.

-I inode-size
Menentukan ukuran setiap inode dalam byte. Nilai ukuran inode haruslah kekuatan 2 lebih besar atau sama dengan 128.

df -iharus menunjukkan jumlah inode yang dialokasikan dan digunakan. Dengan opsi default, satu partisi 30 GB yang saya lihat memiliki satu inode untuk setiap 16 kB, tetapi jika file Anda sangat kecil, Anda dapat mengatur, katakanlah, -i 4096untuk memiliki satu inode untuk setiap blok data pada sistem.

Jika file Anda lebih kecil dari 4096, Anda mungkin ingin mengurangi ukuran blok sistem file juga, karena semua file biasa akan memerlukan satu blok data penuh pula. (Yaitu, pada ext4. Saya tidak tahu apakah sistem file saat ini melakukan pengepakan file kecil.)

-b ukuran blok
Tentukan ukuran blok dalam byte. Nilai ukuran blok yang valid adalah 1024, 2048 dan 4096 byte per blok. Jika dihilangkan, ukuran blok ditentukan secara heuristik oleh ukuran sistem file dan penggunaan sistem file yang diharapkan (lihat opsi -T).

mkfs.ext4juga memiliki -T <type>opsi yang dapat digunakan sebagai singkatan untuk beberapa atau semua ini. Pengaturan sedang dalam /etc/mke2fs.conf, yang pada Debian saya membuat misalnya mkfs.ext4 -T smallsetara dengan

mkfs.ext4 -b 1024 -I 128 -i 4096

Yang mungkin bukan set pilihan yang buruk untuk banyak file kecil (dan tidak ada xattrs.)

Jika file Anda bahkan lebih kecil dari satu kB, sistem file mungkin bukan cara terbaik untuk menyimpan data, tetapi sesuatu seperti database atau sistem aplikasi tertentu mungkin harus dipertimbangkan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.