Tôi có một môi trường ảo hóa mật độ rất cao với các container, vì vậy tôi đang cố gắng làm cho mỗi container thực sự nhỏ. "Thực sự nhỏ" có nghĩa là 87 MB trên cơ sở Ubuntu 14.04 (Trusty Tahr) mà không phá vỡ tính tương thích của trình quản lý gói.
Vì vậy, tôi sử dụng LVM làm nơi lưu trữ dự phòng cho các container của mình và gần đây tôi đã tìm thấy những con số rất lạ. Họ đây rồi.
Hãy tạo một khối lượng logic 100 MiB (yeah, power of 2).
sudo lvcreate -L100M -n test1 /dev/purgatory
Tôi muốn kiểm tra kích thước, vì vậy tôi phát hành sudo lvs --units k
test1 purgatory -wi-a---- 102400.00k
Tuyệt vời, đây thực sự là 100 MiB.
Bây giờ hãy tạo một hệ thống tập tin ext4 . Và tất nhiên, chúng tôi nhớ -m 0
tham số, ngăn chặn lãng phí không gian.
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
Ngọt ngào và sạch sẽ. Lưu ý kích thước khối - khối lượng logic của chúng tôi nhỏ, vì vậy mkfs.ext4 đã quyết định tạo khối có kích thước 1 KiB, không phải là 4 KiB thông thường.
Bây giờ chúng tôi sẽ gắn kết nó.
sudo mount /dev/purgatory/test1 /mnt/test1
Và hãy gọi df
mà không có tham số (chúng tôi muốn thấy 1 khối KiB)
/dev/mapper/purgatory-test1 95054 1550 91456 2% /mnt/test1
Đợi đã, oh shi ~
Chúng tôi có tổng số 95054 khối. Nhưng bản thân thiết bị có 102400 khối 1 KiB. Chúng tôi chỉ có 92,8% lưu trữ của chúng tôi. Các khối của tôi ở đâu, người đàn ông?
Hãy nhìn vào nó trên một thiết bị khối thực sự. A có đĩa ảo 16 GiB, 16777216 khối 1K, nhưng chỉ có 15396784 khối ở đầu ra df. 91,7%, nó là gì?
Bây giờ hãy theo dõi cuộc điều tra (spoiler: không có kết quả)
Hệ thống tập tin có thể bắt đầu không ở đầu thiết bị. Điều này là lạ, nhưng có thể. May mắn thay, ext4 có byte ma thuật, hãy kiểm tra sự hiện diện của chúng.
sudo hexdump -C / dev / luyện ngục / test1 | grep "53 ef"
Điều này cho thấy siêu khối:
00000430 a9 10 e7 54 01 00 ff ff 53 ef 01 00 01 00 00 00 |...T....S.......|
Hex 430 = Dec 1072, vì vậy đâu đó sau kilobyte đầu tiên. Có vẻ hợp lý, ext4 bỏ qua 1024 byte đầu tiên cho các số lẻ như VBR, v.v.
- Đây là tạp chí!
Không có nó không phải là. Nhật ký lấy không gian từ Có sẵn nếu đầu ra df.
- Ồ, chúng tôi có dump2fs và có thể kiểm tra kích thước ở đó!
... rất nhiều greps ...
sudo dumpe2fs /dev/purgatory/test1 | grep "Free blocks"
Ôi.
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
Và chúng tôi có một số khác. 93504 khối miễn phí.
Câu hỏi là: chuyện gì đang xảy ra?
- Thiết bị chặn: 102400k (lvs nói)
- Kích thước hệ thống tập tin: 95054k (df nói)
- Khối miễn phí: 93504k (dumpe2fs nói)
- Kích thước có sẵn: 91456k (df nói)
ext2
vẻ hợp lý ở đây, chắc chắn
ext2
cho các phân vùng nhỏ.