จะเกิดอะไรขึ้นถ้าเกินขีด จำกัด ของไฟล์ 4 พันล้านไฟล์ในพาร์ติชั่น ext4 โดยมีการถ่ายโอนไฟล์ 5 พันล้านไฟล์?
จะเกิดอะไรขึ้นถ้าเกินขีด จำกัด ของไฟล์ 4 พันล้านไฟล์ในพาร์ติชั่น ext4 โดยมีการถ่ายโอนไฟล์ 5 พันล้านไฟล์?
คำตอบ:
สันนิษฐานว่าคุณจะเห็นรสชาติของข้อผิดพลาด "ไม่มีที่เหลือบนอุปกรณ์":
# truncate -s 100M foobar.img
# mkfs.ext4 foobar.img
Creating filesystem with 102400 1k blocks and 25688 inodes
---> number of inodes determined at mkfs time ^^^^^
# mount -o loop foobar.img loop/
# touch loop/{1..25688}
touch: cannot touch 'loop/25678': No space left on device
touch: cannot touch 'loop/25679': No space left on device
touch: cannot touch 'loop/25680': No space left on device
และในทางปฏิบัติคุณถึงขีด จำกัด นี้เร็วกว่า "4 พันล้านไฟล์" ตรวจสอบระบบไฟล์ของคุณกับทั้งสองdf -h
และdf -i
จะหาวิธีพื้นที่มากมีซ้าย
# df -h loop/
Filesystem Size Used Avail Use% Mounted on
/dev/loop0 93M 2.1M 84M 3% /dev/shm/loop
# df -i loop/
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/loop0 25688 25688 0 100% /dev/shm/loop
ในตัวอย่างนี้ถ้าไฟล์ของคุณไม่ใช่ขนาด 4K โดยเฉลี่ยคุณจะใช้พื้นที่ไอโหนดเร็วกว่าพื้นที่เก็บข้อมูล มันเป็นไปได้ที่จะระบุอัตราส่วนอื่น ( mke2fs -N number-of-inodes
หรือ-i bytes-per-inode
หรือ-T usage-type
ตามที่กำหนดใน/etc/mke2fs.conf
)
git repack
ในที่เก็บ git แต่ละอันเพื่อรวมวัตถุทั้งหมดแยกเป็นไฟล์แพ็ค
touch
ไม่ต้องแฟนซีecho
คุณยังแสดงจุดสำคัญและความเข้าใจผิดที่มักเกิดขึ้น: มันเป็นไปได้ที่จะเติมดิสก์ด้วยไฟล์เปล่า
git repack
ไม่ได้หลวมฟังก์ชั่นใด ๆ แต่ก็ยังคงเป็นฟังก์ชั่น repo คอมไพล์เดียวกันtar
ทำให้ไม่สามารถอ่านได้สำหรับหลาย ๆ โปรแกรมที่คาดว่าโครงการหรือพื้นที่เก็บข้อมูลคอมไพล์
เมื่อถึงขีด จำกัด แล้วความพยายามในการสร้างไฟล์ที่ตามมาจะล้มเหลวโดยENOSPC
ระบุว่าระบบไฟล์เป้าหมายไม่มีที่ว่างสำหรับไฟล์ใหม่
ในสถานการณ์ที่คุณอธิบายโดยทั่วไปสิ่งนี้จะส่งผลให้การถ่ายโอนยกเลิกเมื่อถึงขีด จำกัด