Điều gì xảy ra nếu vượt quá giới hạn 4 tỷ tệp trong phân vùng ext4?


46

Điều gì xảy ra nếu vượt quá giới hạn 4 tỷ tệp trong phân vùng ext4, ví dụ như chuyển 5 tỷ tệp?

Câu trả lời:


79

Có lẽ, bạn sẽ thấy một số lỗi của "Không còn chỗ trống trên thiết bị":

# 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

Và trong thực tế, bạn đạt đến giới hạn này sớm hơn rất nhiều so với "4 tỷ tệp". Kiểm tra hệ thống tập tin của bạn với cả hai df -hdf -iđể tìm hiểu còn lại bao nhiêu dung lượng.

# 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

Trong ví dụ này, nếu trung bình các tệp của bạn không có kích thước 4K, bạn sẽ hết không gian inode sớm hơn nhiều so với không gian lưu trữ. Có thể chỉ định một tỷ lệ khác ( mke2fs -N number-of-inodeshoặc -i bytes-per-inodehoặc -T usage-typetheo quy định tại /etc/mke2fs.conf).


1
Cảm ơn câu trả lời của bạn, đôi khi tôi lo lắng, tôi có hơn 400 triệu tệp trong phân vùng chính của mình (RAID 50), tôi có nhiều kho lưu trữ git, đó là để bảo mật nếu điều đó xảy ra
Bensuperpc

5
@ensuperpc: Nếu nhiều tệp không được sử dụng thường xuyên - chỉ ở đó cho mục đích sao lưu - bạn có thể xem xét đưa từng dự án vào tệp tar của riêng mình. Điều đó làm giảm đáng kể số lượng tệp và cả dung lượng chiếm dụng nếu bạn sử dụng tùy chọn nén.
jamesqf

27
@jamesqf Nếu bạn chưa có, hãy thử chạy git repacktrong mỗi kho git để kết hợp tất cả các đối tượng riêng biệt vào một tệp gói.
user253751

13
+1 Vì bạn chỉ đang sử dụng touch, không ưa thích echo, bạn cũng cho thấy một điểm quan trọng và một quan niệm sai lầm thường được thực hiện: Có thể lấp đầy một đĩa với các tệp trống.
rexkogitans

6
@jamesqf git repackkhông mất bất kỳ chức năng nào, nó vẫn hoạt động giống như git repo, tarkhiến cho nhiều chương trình mong đợi một dự án hoặc kho lưu trữ git
Ferrybig

52

Khi đạt đến giới hạn, các lần thử tiếp theo để tạo tệp sẽ thất bại ENOSPC, cho biết hệ thống tệp đích không có chỗ cho các tệp mới.

Trong kịch bản bạn mô tả, điều này thường sẽ dẫn đến việc hủy bỏ chuyển nhượng khi đạt đến giới hạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.