Saya memiliki lingkungan tervirtualisasi dengan wadah yang sangat tinggi, jadi saya mencoba membuat setiap wadah sangat kecil. "Sangat kecil" berarti 87 MB di pangkalan Ubuntu 14.04 (Trusty Tahr) tanpa memutus kompatibilitas manajer paket.
Jadi saya menggunakan LVM sebagai penyimpanan dukungan untuk wadah saya dan baru-baru ini saya menemukan angka yang sangat aneh. Di sini mereka.
Mari kita buat volume logis 100 MiB (yeah, kekuatan 2).
sudo lvcreate -L100M -n test1 /dev/purgatory
Saya ingin memeriksa ukuran, jadi saya masalah sudo lvs --units k
test1 purgatory -wi-a---- 102400.00k
Manis, ini benar-benar 100 MiB.
Sekarang mari kita membuat sistem file ext4 . Dan tentu saja, kita ingat -m 0
parameter, yang mencegah pemborosan ruang.
sudo mkfs.ext4 -m 0 /dev/purgatory/test1
mke2fs 1.42.9 (4-Feb-2014)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
25688 inodes, 102400 blocks
0 blocks (0.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67371008
13 block groups
8192 blocks per group, 8192 fragments per group
1976 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729
Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
Manis dan bersih Pikirkan ukuran blok - volume logis kami kecil, jadi mkfs.ext4 memutuskan untuk membuat blok berukuran 1 KiB, bukan yang biasanya 4 KiB.
Sekarang kita akan memasangnya.
sudo mount /dev/purgatory/test1 /mnt/test1
Dan mari kita panggil df
tanpa parameter (kami ingin melihat 1 blok KiB)
/dev/mapper/purgatory-test1 95054 1550 91456 2% /mnt/test1
Tunggu, oh shi ~
Kami memiliki total 95054 blok. Tetapi perangkat itu sendiri memiliki 102400 blok 1 KiB. Kami hanya memiliki 92,8% dari penyimpanan kami. Di mana blok saya, teman?
Mari kita melihatnya pada perangkat blok nyata. A memiliki disk virtual 16 GiB, 16777216 blok 1K, tetapi hanya 15396784 blok dalam output df. 91,7%, apa itu?
Sekarang ikuti investigasi (spoiler: tidak ada hasil)
Filesystem bisa dimulai bukan di awal perangkat. Ini aneh, tetapi mungkin. Untungnya, ext4 memiliki byte ajaib, mari kita periksa keberadaan mereka.
sudo hexdump -C / dev / purgatory / test1 | grep "53 ef"
Ini menunjukkan superblock:
00000430 a9 10 e7 54 01 00 ff ff 53 ef 01 00 01 00 00 00 |...T....S.......|
Hex 430 = Des 1072, jadi di suatu tempat setelah kilobyte pertama. Terlihat masuk akal, ext4 melompati 1024 byte pertama untuk keanehan seperti VBR, dll.
- Ini jurnal!
Tidak, bukan. Jurnal mengambil ruang dari Tersedia jika output df.
- Oh, kami punya dump2fs dan dapat memeriksa ukuran di sana!
... banyak greps ...
sudo dumpe2fs /dev/purgatory/test1 | grep "Free blocks"
Aduh.
Free blocks: 93504
Free blocks: 3510-8192
Free blocks: 8451-16384
Free blocks: 16385-24576
Free blocks: 24835-32768
Free blocks: 32769-40960
Free blocks: 41219-49152
Free blocks: 53249-57344
Free blocks: 57603-65536
Free blocks: 65537-73728
Free blocks: 73987-81920
Free blocks: 81921-90112
Free blocks: 90113-98304
Free blocks: 98305-102399
Dan kami memiliki nomor lain. 93504 blok gratis.
Pertanyaannya adalah: apa yang terjadi?
- Blokir perangkat: 102400k (kata lvs)
- Ukuran sistem file: 95054k (kata df)
- Blok gratis: 93504k (kata dumpe2fs)
- Ukuran yang tersedia: 91456k (kata df)
ext2
untuk partisi kecil.ext2
terlihat masuk akal di sini, tentu sajaJawaban:
Coba ini:
mkfs.ext4 -N 104 -m0 -O ^has_journal,^resize_inode /dev/purgatory/test1
Saya pikir ini tidak membuat Anda mengerti "apa yang sedang terjadi".
-N 104
(setel jumlah iNodes yang seharusnya dimiliki sistem file Anda)-m 0
(tidak ada blok yang dipesan)-O ^has_journal,^resize_inode
(nonaktifkan fiturhas_journal
danresize_inode
resize_inode
"biaya" bebas ruang (sebagian besar 1550 1K-Blok / 2% yang Anda lihat di Andadf
- 12K digunakan untuk "hilang + ditemukan" folder)has_journal
"biaya" ruang yang dapat digunakan (4096 1K-Blok dalam kasus Anda)Kami
102348
keluar dari102400
, 52 blok lainnya tidak dapat digunakan (jika kami telah menghapus folder "hilang + ditemukan"). Karena itu kami menyelamidumpe2fs
:dan hitung blok yang digunakan (untuk Superblock cadangan, deskriptor grup, Blok bitmap, bitmap inode, dan tabel inode) atau kami
grep
dan hitung:yang memberi kita jumlah baris yang memiliki satu blok (dalam contoh kita) dan
yang memberi kita hitungan garis yang memiliki dua blok (dalam contoh kita).
Jadi kami memiliki (dalam contoh kami)
13
baris dengan masing-masing satu blok dan19
baris dengan dua blok masing-masing.yang memberi kita
51
blok yang digunakan oleh ext4 itu sendiri. Akhirnya hanya ada satu blok yang tersisa. Blok 0, yang merupakan1024
byte yang dilompati di awal untuk hal-hal seperti sektor boot.sumber
df
di fs dengan jurnal: 95054k -df
di fs tanpa jorunal 99150k - dan jangan mencampur ruang "dapat digunakan" dan "bebas".mkfs.xfs -l size=512 -d agcount=1
akan membuat sistem file dengan ukuran log minimum absolut (alias jurnal), tetapi kinerja penulisan mungkin menurun. Saya tidak berpikir dukungan kode XFS beroperasi tanpa log. Mungkin hanya-baca, untuk mendukung kasus-kasus di mana perangkat log eksternal rusak. (juga,agcount=1
mungkin ide buruk lain untuk kinerja menulis, terutama paralel. Dan header grup alokasi mungkin juga kecil.)mkfs.xfs -d agcount=1
pada partisi 100MiB membuat FS 95980kiB, dengan 5196k digunakan, 90784k tersedia. Agcount default adalah 4, dan ukuran log default adalah 1605 blok (juga minimum). Jadi XFS memang menggunakan log sekecil yang bersedia Anda tentukan, untuk FSe kecil.Jawaban singkatnya:
Tidak semua ruang pada perangkat blok menjadi ruang yang tersedia untuk data Anda: beberapa ruang mentah diperlukan untuk internal sistem file, pembukuan di belakang layar.
Pembukuan itu termasuk blok super, deskriptor grup blok, bitmap inode dan blok, dan tabel inode. Selain itu, salinan blok super untuk keperluan pencadangan / pemulihan dibuat di sejumlah lokasi. Bacaan panjang tentang internal sistem file EXT4 dapat ditemukan di ext4.wiki.kernel.org .
Karena EXT4 adalah sistem file jurnal yang membutuhkan ruang juga.
Selain itu beberapa ruang disediakan untuk ekspansi sistem file di masa depan.
Jawaban panjangnya:
Saya telah membuat ulang skenario Anda di salah satu sistem pengujian saya:
Kemudian bahkan sebelum memasang sistem file a
dumpe2fs
menunjukkan:dan setelah pemasangan:
Jadi, apa yang
df
ditunjukkan kepada kita? Dari 102400 blok kapasitas perangkat penyimpanan mentah, 99150 blok 1K terlihat oleh sistem file, artinya 3250 blok 1-Kilobita ruang penyimpanan mentah telah menjadi tidak dapat digunakan untuk penyimpanan data aktual.Ke mana blok-blok itu pergi? Menggulir ke bawah di
dumpe2fs
output menunjukkan dengan tepat di mana:1 block
(blok # 0) 1024 byte pertama dilewati untuk memungkinkan instalasi sektor boot x86 dan keanehan lainnya.1 block
ditempati oleh blok super Primer.1 block
berisi deskriptor grup.256 blocks
yang disediakan untuk Grup Descriptor Table untuk memungkinkan Resize masa depan filesystem.16 blocks
ditugaskan untuk bitmap blok.16 blocks
ditugaskan untuk bitmap inode.246 blocks
ditugaskan untuk tabel inode.Itu sudah menyumbang 537 dari 3250 blok yang hilang. Sistem file ext4 dibagi menjadi serangkaian kelompok blok dan menggulir ke bawah lebih lanjut menunjukkan alokasi kapasitas penyimpanan mentah yang serupa dengan file-sistem internal di grup blok lain:
Sekarang kembali ke
df
output:Alasan bahwa pada sistem file baru yang sudah 7% dari kapasitas ditandai sebagai sedang digunakan adalah:
99150 (ukuran sistem file) MINUS 5120 (jumlah blok cadangan) MINUS 5646 (blok bekas, 4096 di antaranya berasal dari Journal (lagi-lagi bagian dari output dumpe2fs`))
= 88384
Hitungan blok gratis di dumpe2fs adalah ukuran yang tersedia dari sistem file dikurangi penggunaan aktual (dan tidak memperhitungkan blok yang diperhitungkan) jadi 99150 - 5646 = 93504.
sumber
Bukan jawaban untuk pertanyaan itu, tetapi saya jadi penasaran jadi saya membayangkan orang lain akan melakukannya. Karena saya sudah mem-boot liveCD, dan memiliki hard drive yang dapat saya mainkan tanpa khawatir kesalahan pengetikan, saya melanjutkan dan menguji.
Saya membuat partisi dengan semua FSe yang dikirimkan Ubuntu 14.10 untuk mkfs, pada partisi 100MiB. (kecuali minix, yang hanya mendukung 64MiB, dan bfs, yang merupakan hal SCO yang belum pernah saya dengar.)
Pertama saya melihat
df -k
ruang yang tersedia (dengan pengaturan mkfs default), kemudian sayadd
mengedit/dev/zero
file pada setiap FS untuk memastikan mereka dapat diisi penuh. (Yaitu memeriksa apakah yang diklaimavailable space
benar-benar tersedia.)for i in /media/ubuntu/small-*;do sudo dd if=/dev/zero of="$i/fill" bs=16k;done
Mengapa btrf memiliki begitu banyak ruang yang tidak dapat digunakan? Mungkin untuk metadata? nggak nggak
Kedua sistem file berbasis pohon tidak dapat mengemas file kosong di mana saja, tetapi semua yang lain bisa.
Atau lihat saja seberapa besar file yang dapat Anda buat:
(Saya menyebut partisi ext4 saya "small-ext" karena saya tidak berencana untuk menjadi gila dan membuat setiap filesystem. Jadi ext = ext4 di sini. BUKAN yang asli pre-ext2 ext.)
Dan
df -k
output setelah menghapusnya lagi:(JFS kembali ke 1% digunakan setelah saya menghapus "menyentuh" juga. Entah ada penundaan waktu, atau butuh menulis lagi untuk mendapatkan ukuran yang tersedia untuk memperbarui.)
Ngomong-ngomong, saya pikir itu tentang rasa ingin tahu saya.
sumber