Cách để ngay lập tức lấp đầy / sử dụng nhiều dung lượng đĩa?


45

Trên máy ảo Linux, tôi muốn KIỂM TRA giám sát NAGIOS sâu sắc hơn là chỉ tắt VM hoặc ngắt kết nối máy ảo; Tôi muốn kiểm tra hoặc "thực thi báo động không gian đĩa" thông qua việc chiếm vài% dung lượng trống trong một khoảng thời gian ngắn.

Tôi biết rằng tôi chỉ có thể sử dụng một

dd if=/dev/zero of=/tmp/hd-fillup.zeros bs=1G count=50

hoặc một cái gì đó tương tự ... nhưng điều này làm mất thời gian và tải hệ thống và yêu cầu thời gian một lần nữa khi xóa các tệp thử nghiệm bằng rm.

Có cách nào nhanh chóng (gần như ngay lập tức) để lấp đầy một phân vùng không tải xuống hệ thống và mất nhiều thời gian không? Tôi đang suy nghĩ về một cái gì đó phân bổ không gian, nhưng không "lấp đầy" nó.


xin lỗi, quên đề cập rằng đó là hệ thống tập tin >> ext3.
Axel Werner

Bạn cần nâng cấp nó lên ext4 để hỗ trợ fallocate.
Rui F Ribeiro

1
Bom Zip luôn hoạt động
galois

1
@jaska Làm cho nó một câu trả lời. Đó là ý tưởng đầu tiên tôi có được khi đọc tiêu đề ...
Crowley

Tại sao bạn không sử dụng /dev/full? (Giả sử nó tồn tại). Hãy thử echo 'test' > /dev/fulltrên Debian.
Ismael Miguel

Câu trả lời:


63

Cách nhanh nhất để tạo một tệp trong hệ thống Linux là sử dụng fallocate:

fallocate -l 50G file 

Từ người đàn ông:

fallocate được sử dụng để thao tác không gian đĩa được phân bổ cho một tệp, hoặc để phân bổ hoặc phân bổ nó.
Đối với các hệ thống tập tin hỗ trợ cuộc gọi hệ thống ngụy biện, việc sắp xếp trước được thực hiện nhanh chóng bằng cách phân bổ các khối và đánh dấu chúng là chưa được khởi tạo, không yêu cầu IO cho các khối dữ liệu. Điều này nhanh hơn nhiều so với việc tạo một tệp bằng cách điền vào nó bằng số không.
Được hỗ trợ cho XFS (kể từ Linux 2.6,38), ext4 (kể từ Linux 3.0), Btrfs (kể từ Linux 3.7) và tmpfs (kể từ Linux 3.5).


1
Tại sao bạn chạy nó qua sudo?
gerrit

1
@gerrit Đã thêm điểm đó vào câu trả lời.
Rui F Ribeiro

3
" fallocateCần đặc quyền gốc" Không có trên hệ thống của tôi (Linux Mint 17.3, hạ lưu Ubuntu, do đó Debian). (hệ thống tệp ext4)
TJ Crowder

1
+1 mặc dù OP đã đề cập rõ ràng rằng hệ thống tập tin của anh ấy là ext3.
syirecton-dj

1
@RuiFRibeiro, cảm ơn! đối với sles11sp4, tôi đã có thể tạo một tệp, định dạng tệp đó bằng ext4, nhưng ở nơi không thể gắn kết nó trong chế độ RW. sau đó tôi tìm thấy một thông điệp kernel trong / var / log / message cho biết, ext4 chỉ được hỗ trợ dưới dạng chỉ đọc. : /
Axel Werner

13

Các lựa chọn thay thế khác bao gồm:

  1. để thay đổi ngưỡng báo động thành thứ gì đó gần hoặc dưới mức sử dụng hiện tại hoặc
  2. để tạo một phân vùng thử nghiệm rất nhỏ với các nút, kích thước hoặc các thuộc tính hạn chế khác.

Có thể kiểm tra những thứ như chạy vào phần trăm dành riêng gốc, nếu có, cũng có thể có ích.


tỷ lệ phần trăm dự trữ gốc thông thường là 10% trừ khi bạn tinh chỉnh nó - kết quả là sự lãng phí hệ thống quá lớn trong các phân vùng lớn / đĩa hiện đại. Khi xác định cảnh báo, bạn tốt hơn nên đưa nó vào tài khoản.
Rui F Ribeiro

+1 cho điều đầu tiên. Một trăm lần đúng. Tại sao tôi thực sự nên tạo một cái gì đó trên đĩa máy? Điều gì xảy ra nếu một cái gì đó (như coredump, công việc hàng loạt tạo ra các tệp tạm thời lớn, ...) xảy ra tại thời điểm thử nghiệm của tôi và toàn bộ đĩa bị vô tình ăn hết?
Fiisch

2
@Fisch - Tại sao? Để đảm bảo ngưỡng cảnh báo của bạn là chính xác và bạn không làm điều gì đó như vô tình đặt phần trăm miễn phí inode thay vì phần trăm không gian đĩa (mà tôi đã thấy trước đây). Nếu một cái gì đó không thành công vì bạn đã lấp đầy một đĩa đến ngưỡng cảnh báo, thì ngưỡng cảnh báo của bạn quá thấp - toàn bộ điểm cảnh báo là nó phải cảnh báo bạn trước khi mọi thứ bắt đầu bị phá vỡ.
Johnny

Cát, điểm tốt. Nhưng không có giải pháp cho tôi. Tôi không có các điều khiển qua cấu hình VM (không thể thay đổi các phân vùng hoặc đĩa ảo), cũng như không có các điều khiển trên NAGIOS Server.
Axel Werner

2
@AxelWerner Bạn có thể loopback-mount một tập tin là partitiion "giả" không? Điều đó vẫn sẽ cho phép bạn kiểm tra mà không ảnh hưởng nghiêm trọng đến bất cứ điều gì. Định dạng nó với một trong các hệ thống tập tin được hỗ trợ và bạn cũng có thể chơi xung quanh với fallocate.
Tonny

9
  1. fallocate -l 50G big_file

  2. truncate -s 50G big_file

  3. dd of=bigfile bs=1 seek=50G count=0

Vì ba cách đó đều có thể lấp đầy một phân vùng một cách nhanh chóng.

Nếu bạn thích sử dụng dd , thông thường bạn có thể thử nó với tìm kiếm . Chỉ cần đặt seek=file_size_what_you_needvà thiết lập count=0. Điều đó sẽ cho hệ thống biết có một tệpkích thước của nó là những gì bạn đặt, nhưng hệ thống sẽ không thực sự tạo ra nó. Và được sử dụng theo cách này, bạn có thể tạo một tệp lớn hơn kích thước phân vùng.


Ví dụ, trên một phân vùng ext4 có ít hơn 3G có sẵn. Sử dụng dd để tạo tệp 5T tồn tại dưới dạng siêu dữ liệu - hầu như không yêu cầu không gian khối.

df -h . ; dd of=biggerfile bs=1 seek=5000G count=0 ; ls -log biggerfile ; df -h .

Đầu ra:

Filesystem      Size  Used Avail Use% Mounted on
/dev/sda9        42G   37G  2.8G  94% /home
0+0 records in
0+0 records out
0 bytes copied, 4.9296e-05 s, 0.0 kB/s
-rw-rw-r-- 1 5368709120000 Jun 29 13:13 biggerfile
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda9        42G   37G  2.8G  94% /home

1
bạn có thể thêm một số thông tin để trả lời của bạn?
con mèo

Tôi chỉ thêm suy nghĩ trong một câu hỏi đã hoàn thành cho những người tìm kiếm cùng một câu hỏi theo cách khác. bỏ qua nó nếu bạn không.
Se ven

Đây count=0là phương pháp khá thú vị, tôi đã thêm một ví dụ.
agc

7
Lưu ý rằng ddví dụ trên có thể phân bổ một tệp thưa thớt. Trong trường hợp đó, kích thước tệp là 50G, thực tế chỉ sử dụng một khối (hoặc thậm chí không) và do đó, đĩa không đầy. YMMV.
MAP

2
Tôi đã thử đề xuất của bạn trên hệ thống tập tin ext3 của tôi. nó đã không hoạt động như mong đợi. cắt ngắn và dd đã tạo một tệp có kích thước tệp lớn, nhưng "df -h" không nhận ra nó. vẫn hiển thị cùng một không gian hd miễn phí.
Axel Werner

0

Bạn cũng có thể tận dụng công cụ căng thẳng được hỗ trợ trên nhiều hệ thống dựa trên Linux:

stress-ng --fallocate 4 --fallocate-bytes 70% --timeout 1m --metrics --verify --times
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.