Tôi có thể hết dung lượng đĩa bằng cách tạo một số lượng lớn tệp trống không?


35

Điều nổi tiếng là các tệp văn bản trống có byte không:

nhập mô tả hình ảnh ở đây

Tuy nhiên, mỗi trong số chúng chứa siêu dữ liệu , theo nghiên cứu của tôi, được lưu trữ trong các nútsử dụng không gian .

Với điều này, có vẻ hợp lý với tôi rằng có thể lấp đầy một đĩa bằng cách hoàn toàn tạo các tệp văn bản trống. Điều này có đúng không? Nếu vậy, tôi cần bao nhiêu tệp văn bản trống để điền vào một đĩa, giả sử, 1GB?


Để thực hiện một số kiểm tra, tôi chạy df -inhưng điều này rõ ràng cho thấy% số lượng nút được sử dụng (?) Thay vì chúng nặng bao nhiêu.

Filesystem             Inodes  IUsed    IFree IUse% Mounted on
udev                   947470    556   946914    1% /dev
tmpfs                  952593    805   951788    1% /run
/dev/sda2            28786688 667980 28118708    3% /
tmpfs                  952593     25   952568    1% /dev/shm
tmpfs                  952593      5   952588    1% /run/lock
tmpfs                  952593     16   952577    1% /sys/fs/cgroup
/dev/sda1                   0      0        0     - /boot/efi
tmpfs                  952593     25   952568    1% /run/user/1000
/home/lucho/.Private 28786688 667980 28118708    3% /home/lucho

Câu trả lời:


40

Đầu ra này gợi ý 28786688các nút tổng thể, sau đó lần thử tiếp theo để tạo tệp trong hệ thống tệp gốc (thiết bị /dev/sda2) sẽ trả về ENOSPC("Không còn chỗ trống trên thiết bị").

Giải thích: trên thiết kế hệ thống tệp * nix ban đầu, số lượng nút tối đa được đặt tại thời điểm tạo hệ thống tệp. Không gian dành riêng được phân bổ cho họ. Bạn có thể hết inodes trước khi hết dung lượng dữ liệu hoặc ngược lại. Hệ thống tập tin Linux mặc định phổ biến nhất ext4vẫn có giới hạn này. Để biết thông tin về kích thước inode trên ext4, hãy xem manpage cho mkfs.ext4.

Linux hỗ trợ các hệ thống tập tin khác mà không có giới hạn này. Trên btrfs, không gian được phân bổ động. "Cấu trúc inode tương đối nhỏ và sẽ không chứa dữ liệu tệp nhúng hoặc dữ liệu thuộc tính mở rộng." (ext3 / 4 phân bổ một số không gian bên trong các nút cho các thuộc tính mở rộng ). Tất nhiên bạn vẫn có thể hết dung lượng đĩa bằng cách tạo quá nhiều mục siêu dữ liệu / thư mục.

Suy nghĩ về nó, tmpfs là một ví dụ khác, nơi các nút được phân bổ động. Thật khó để biết số lượng nút tối đa được báo cáo df -ithực sự có ý nghĩa gì trong thực tế đối với các hệ thống tệp này. Tôi sẽ không gắn bất kỳ ý nghĩa với giá trị được hiển thị.


"XFS cũng phân bổ các nút một cách linh hoạt. JFS cũng vậy, cũng như vậy / reiserfs. F2FS cũng vậy. Các hệ thống tập tin Unix truyền thống phân bổ các nút tĩnh tại thời điểm mkfs, và các FS hiện đại như ext4 theo dõi di sản của họ, nhưng ngày nay, đó là ngoại lệ, không phải là quy tắc.

"BTW, XFS cho phép bạn đặt giới hạn về tỷ lệ phần trăm không gian tối đa được sử dụng bởi các nút, do đó bạn có thể hết các nút trước khi bạn đến điểm mà bạn không thể thêm vào các tệp hiện có. (Mặc định là 25% cho các FS dưới 1TB, 5% cho các hệ thống tệp lên tới 50TB, lớn hơn 1% so với mức đó.) Dù sao, việc sử dụng không gian này trên siêu dữ liệu (inodes và bản đồ phạm vi) sẽ được phản ánh thường xuyên df -h"- Peter Cordes bình luận về câu trả lời này


Vì vậy, bạn đang nói rằng nếu tôi tạo 28786688-667980=28118708các tệp trống, tôi sẽ hết hiệu lực và "phá vỡ hệ thống của tôi"?
luchonacho

1
XFS cũng phân bổ inodes động. JFS cũng vậy. Đã làm / không reiserfs. F2FS cũng vậy . Các hệ thống tập tin Unix truyền thống phân bổ các nút tĩnh tại thời điểm mkfs, và các FS hiện đại như ext4 theo dõi di sản của họ trở lại nó, nhưng ngày nay, đó là ngoại lệ, không phải là quy tắc. (Trừ khi bạn cân nhắc mọi thứ bằng cơ sở được cài đặt, trong đó có thể chính xác để nói rằng hầu hết các hệ thống tệp hiện có trên đĩa trên các hệ thống * nix trong tự nhiên đều có các nút được cấp phát tĩnh.)
Peter Cordes

BTW, XFS không cho phép bạn đặt giới hạn về tỷ lệ phần trăm không gian tối đa được sử dụng bởi các nút, do đó bạn có thể hết các nút trước khi bạn đến điểm mà bạn không thể nối vào các tệp hiện có. (Mặc định là 25% đối với FSes dưới 1TB, 5% cho hệ thống tập tin lên đến 50TB, 1% cho lớn hơn.) Dù sao, việc sử dụng không gian này trên siêu dữ liệu (inodes và mức độ bản đồ) sẽ được phản ánh trong thông thường df -h, @luchonacho.
Peter Cordes

26

Tạo tập tin trống liên quan đến việc sử dụng như sau:

  • inodes, một cho mỗi tập tin;
  • mục nhập thư mục bổ sung, cũng là một cho mỗi tệp, nhưng tổng hợp.

Số lượng các nút có sẵn thường được xác định khi một hệ thống tệp được tạo và không thể thay đổi (một số hệ thống tệp như Btrfs hoặc XFS phân bổ động các nút). Đó là những gì được đo bằng df -i. Khi bạn hết inodes, bạn không thể tạo các tệp hoặc thư mục mới, ngay cả khi bạn có sẵn dung lượng đĩa.

Các mục thư mục cũng chiếm không gian, từ không gian đĩa có sẵn. Bạn có thể thấy điều này bằng cách xem kích thước của một thư mục: nó luôn là bội số của kích thước khối và khi một thư mục chứa nhiều tệp, kích thước của nó sẽ tăng lên. Nếu bạn hết dung lượng ổ đĩa, bạn không thể tạo các tệp hoặc thư mục mới trong một thư mục là đầy đủ ( tức là việc thêm một tệp mới sẽ liên quan đến việc phân bổ một khối mới), ngay cả khi bạn có sẵn các nút.

Vì vậy, có, có thể hết dung lượng đĩa chỉ bằng các tệp trống.


Vì vậy, tôi sẽ cần phải tạo đủ các tập tin trống để sử dụng 100% các nút?
luchonacho

@luchonacho có, hiệu quả một tập tin trống cho mỗi inode.
Stephen Kitt

Cũng lưu ý các thuộc tính mở rộng có thể thêm không gian trên đó. Chẳng hạn, nếu thư mục có nhiều ACL mặc định, việc tạo một tệp trong đó sẽ cần không gian để lưu trữ các ACL đó.
Stéphane Chazelas

OK, tôi đứng sửa. Điều đó là, nó trông lạ đối với tôi cả với phông chữ được hiển thị và chiều rộng cố định trên trình duyệt của tôi. Vì tò mò, làm thế nào để bạn chèn chúng? Bàn phím của bạn có một phím khác cho ký tự đó và phím U + 0022 không?
Stéphane Chazelas

Cảm ơn, vì tò mò, tôi đã kiểm tra xem chúng có nằm trên bố trí bàn phím ở Vương quốc Anh của tôi không và thực sự chúng nằm trên AltGr + Shift + V / B (trích dẫn kép mà không thay đổi). Tôi sẽ gắn bó với U + 0022 mặc dù.
Stéphane Chazelas

7

Đối số logic thuần túy:

Tên tệp bao gồm một lượng byte khác không. Ngay cả với nén tối đa theo lý thuyết trong một hệ thống tệp giả định được thiết kế để cho phép số lượng tên tệp tối đa tuyệt đối, mỗi tên tệp vẫn sẽ tiêu thụ ít nhất một bit ở đâu đó trên đĩa vật lý của bạn. Có thể nhiều hơn, nhưng "1 bit cho mỗi tệp" là mức tối thiểu không đáng kể.

Tính toán số lượng bit có thể phù hợp với đĩa của bạn và đó là số lượng tối đa theo lý thuyết của các tệp (trống hoặc không trống) mà bạn có thể lưu trữ trên đó.

Vì vậy, câu trả lời là có. Cuối cùng, bạn sẽ hết dung lượng, bất kể bạn đang sử dụng bộ lưu trữ nào, nếu bạn tiếp tục thêm các tệp trống. Rõ ràng là bạn sẽ hết sớm hơn nhiều so với mức tối đa được tính trong thời trang này, nhưng bạn sẽ hết.


0

Đơn giản là không nhưng bạn có thể chạy hết các nút trên linux, điều này sẽ giống như hết dung lượng.

bạn có thể thử một cái gì đó như thế này trong vỏ của bạn n=0; while :; do touch $n; let n=n+1; done

Chỉ cần đảm bảo chạy nó trong máy ảo nếu không bạn sẽ hết inodes rất nhanh.


Lệnh đó đang làm gì vậy?
luchonacho

Nó bắt đầu trong khi vòng lặp vô hạn thực sự mà mỗi lượt tạo ra một tên tệp là một số nguyên bắt đầu từ 0 rồi 1 2 3 ... cuối cùng nó sẽ tạo ra đủ các tệp để sử dụng tất cả các nút của hệ thống tệp.
in1t3r

1
Nếu chạy lệnh đó trên phân vùng / home của bạn nếu nó độc lập thì / phân vùng bạn sẽ không gặp vấn đề gì, bạn không thể viết nữa vào phân vùng / home của mình. Đề nghị của tôi tạo một thư mục có tên cd inodetest vào đó và sau đó chạy lệnh sau khi bạn thấy các lỗi mà bạn không thể tạo tệp trong hệ thống tệp, nhấn ctrl + C và chạy rm -fr inodetestđể loại bỏ tất cả các tệp trống đó và hoạt động bình thường trở lại. :)
in1t3r

0

Bạn không thể lấp đầy đĩa bằng cách tạo các tệp trống - đĩa vẫn sẽ có nhiều không gian cho các tệp mới. Nhưng vâng, bạn có thể làm cạn kiệt nguồn cung cấp miễn phí hữu hạn của hệ thống tệp - tại thời điểm đó bạn không thể tạo các tệp mới (ngay cả khi đĩa của bạn - hết dung lượng sử dụng - thực sự trống rỗng). Đó chỉ là danh sách các nút của hệ thống tập tin mà tất cả đã được sử dụng, không phải đĩa ... vì vậy hệ thống tập tin đã đầy, trong khi đĩa thực tế trống. Bảng inode sử dụng không gian trên đĩa, nhưng bảng không phát triển khi bạn thêm tệp - giống như một tờ giấy không phát triển khi bạn viết trên đó.

(một câu trả lời trong bình luận của Baard Kopperud)


Không chắc chắn chúng ta cần một câu trả lời khác nói điều tương tự ?
Jeff Schaller
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.