ฉันมีสภาพแวดล้อมแบบเสมือนจริงที่มีความหนาแน่นสูงมากพร้อมกับคอนเทนเนอร์ดังนั้นฉันจึงพยายามทำให้แต่ละคอนเทนเนอร์เล็กมาก "ขนาดเล็กจริง ๆ " หมายถึง 87 MB บนฐานUbuntu 14.04 (Trusty Tahr) โดยไม่แยกความเข้ากันได้ของตัวจัดการแพ็กเกจ
ดังนั้นฉันจึงใช้LVMเป็นที่เก็บข้อมูลสำรองสำหรับตู้คอนเทนเนอร์ของฉันและเมื่อเร็ว ๆ นี้ฉันพบตัวเลขที่แปลกมาก พวกเขาอยู่ที่นี่
ลองสร้างปริมาณตรรกะ 100 MiB (ใช่กำลัง 2)
sudo lvcreate -L100M -n test1 /dev/purgatory
ฉันต้องการตรวจสอบขนาดดังนั้นฉันจึงออก sudo lvs --units k
test1 purgatory -wi-a---- 102400.00k
หวานนี่จริง ๆ 100 MiB
ตอนนี้ให้สร้างระบบไฟล์ext4 และแน่นอนเราจำ-m 0
พารามิเตอร์ซึ่งช่วยป้องกันการสูญเสียพื้นที่
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
หวานและสะอาด คำนึงถึงขนาดบล็อก - โลจิคัลวอลุ่มของเรามีขนาดเล็กดังนั้น mkfs.ext4 จึงตัดสินใจสร้างบล็อกขนาด 1 KiB ไม่ใช่ 4 KiB ปกติ
ตอนนี้เราจะติดมัน
sudo mount /dev/purgatory/test1 /mnt/test1
และเราจะโทรdf
โดยไม่มีพารามิเตอร์ (เราอยากเห็นบล็อก 1 KiB)
/dev/mapper/purgatory-test1 95054 1550 91456 2% /mnt/test1
เดี๋ยวก่อนนะชิ ~
เรามีบล็อกทั้งหมด 95054 บล็อก แต่ตัวอุปกรณ์นั้นมี 102400 บล็อกของ 1 KiB เรามีพื้นที่จัดเก็บของเราเพียง 92.8% บล็อกของฉันอยู่ที่ไหน
ลองดูที่อุปกรณ์บล็อกจริง A มีดิสก์เสมือน 16 GiB, 16777216 บล็อก 1K แต่มีเพียง 15396784 บล็อกเท่านั้นที่อยู่ในเอาต์พุต df 91.7% มันคืออะไร?
ตอนนี้ติดตามการสอบสวน(สปอยเลอร์: ไม่มีผลลัพธ์)
ระบบไฟล์อาจเริ่มต้นไม่ได้ที่จุดเริ่มต้นของอุปกรณ์ มันแปลก แต่เป็นไปได้ โชคดีที่ ext4 มีเวทย์มนตร์เป็นไบต์ลองตรวจสอบสถานะของพวกเขา
sudo hexdump -C / dev / purgatory / test1 | grep "53 ef"
สิ่งนี้แสดงให้เห็นถึง superblock:
00000430 a9 10 e7 54 01 00 ff ff 53 ef 01 00 01 00 00 00 |...T....S.......|
Hex 430 = Dec 1072 ดังนั้นบางแห่งหลังจากกิโลไบต์แรก ดูสมเหตุสมผล ext4 ข้าม 1024 ไบต์แรกเพื่อหาสิ่งแปลกประหลาดเช่น VBR เป็นต้น
- นี่คือบันทึกประจำวัน!
ไม่มันไม่ใช่. Journal ใช้พื้นที่จากว่างหาก df เอาต์พุต
- โอ้เรามี dump2fs และสามารถตรวจสอบขนาดได้!
... greps จำนวนมาก ...
sudo dumpe2fs /dev/purgatory/test1 | grep "Free blocks"
อุ๊ยตาย
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
และเรามีหมายเลขอื่น บล็อกฟรี 93504
คำถามคือเกิดอะไรขึ้น
- อุปกรณ์บล็อก: 102400k (lvs พูดว่า)
- ขนาดระบบไฟล์: 95054k (df พูดว่า)
- บล็อกฟรี: 93504k (dumpe2fs พูดว่า)
- ขนาดที่มี: 91456k (df พูดว่า)
ext2
ดูสมเหตุสมผลที่นี่แน่นอน
ext2
สำหรับพาร์ติชันเล็ก ๆ