Cách lấp đầy ổ cứng trong Linux


24

Tôi đang thực hiện một số thử nghiệm về một đoạn mã và tôi muốn lấp đầy ổ cứng bằng dữ liệu. Tôi thấy rằng ddcó thể tạo ra các tệp lớn ngay lập tức, nhưng dfkhông đồng ý. Đây là những gì tôi đã thử:

dd if=/dev/zero of=filename bs=1 count=1 seek=$((10*1024*1024*1024))

ls -lhhiển thị tệp 10G. Tuy nhiên, df -hcho thấy phân vùng không co lại. Vì vậy, tôi cần làm gì để dfnhận ra dữ liệu hiện đang được thực hiện? Tôi hy vọng một cái gì đó nhanh chóng mà tôi mã hóa trong một bài kiểm tra đơn vị.


Bạn sẽ gặp nhiều may mắn hơn nếu bạn hỏi tại serverfault.com

BTW, 10 * 1024 * 1024 * 1024 tương tự như 10 * 2 ** 30, Đơn giản hơn một chút.
deltaray

Câu trả lời:


26

Vấn đề với seek=<big number>mánh khóe là hệ thống tập tin (thông thường) rất thông minh: nếu một phần của tệp chưa bao giờ được ghi vào (và do đó là tất cả số không), thì không cần phân bổ bất kỳ khoảng trống nào cho nó - vì vậy, như bạn ' bạn đã thấy, bạn có thể có một tệp 10 GB không chiếm dung lượng (cái này được gọi là "tệp thưa" và có thể rất hữu ích trong một số trường hợp, ví dụ như một số triển khai cơ sở dữ liệu nhất định).

Bạn có thể buộc không gian được phân bổ (ví dụ):

dd if=/dev/zero of=filename bs=$((1024*1024)) count=$((10*1024))

sẽ mất nhiều thời gian hơn, nhưng thực sự sẽ lấp đầy đĩa. Tôi khuyên bạn nên làm cho kích thước khối cao hơn nhiều so với một, bởi vì điều này sẽ xác định có bao nhiêu hệ thống gọi ddquy trình tạo ra - kích thước khối càng nhỏ, càng nhiều tòa nhà, và do đó nó sẽ chạy chậm hơn. (Mặc dù vượt quá 1 MB hoặc có thể nó sẽ không tạo ra nhiều khác biệt và thậm chí có thể làm mọi thứ chậm lại ...)


Tôi thường sử dụng bs = (bất kể một nửa kích thước bộ nhớ cache trên ổ đĩa tôi đang viết). Điều này đã hoạt động tốt cho đến nay khi hình ảnh phân vùng vào ổ đĩa cứng lớn hơn để thay đổi kích thước sau này. ETA: từ quan trọng HALF.
atroon

20

Là một tùy chọn khác cho điều này, bạn có thể sử dụng có cùng với một chuỗi và nhanh hơn khoảng 10 lần so với việc chạy dd if = / dev / urandom of = tinyefile. Như thế này

yes abcdefghijklmnopqrstuvwxyz0123456789 > largefile

Điều này, đáng ngạc nhiên, nhanh như việc sử dụng dd if = / dev / zero of = filename bs = 1M.
bhinesley

Cú pháp cũng dễ nhớ.
AWT

7

Bạn đã tạo ra cái được gọi là "tệp thưa thớt" - một tệp, vì phần lớn là trống (tức là đọc lại dưới dạng \ 0), không chiếm dung lượng trên đĩa ngoài những gì thực sự được ghi (1B, sau 10GB của khoảng cách).

Tôi không tin rằng bạn có thể tạo các tệp lớn, lấy không gian đĩa thực tế ngay lập tức - chiếm không gian vật lý có nghĩa là hệ thống tệp cần phân bổ các khối đĩa vào tệp của bạn.

Tôi nghĩ rằng bạn đang bị mắc kẹt với "dd if = / dev / zero of = filename bs = 100M Count = 100" lỗi thời, bị giới hạn bởi tốc độ ghi tuần tự ổ đĩa của bạn.


6

Nếu bạn chỉ kiểm tra các trường hợp có hệ thống tập tin đầy, có thể là ngụy biện là đủ tốt. Và nhanh hơn nữa! ví dụ

ngụy biện -l 150G


3
Điều này cần một tên tệp được chỉ định : fallocate -l 150G foo. Tuy nhiên +1 để đề cập đến công cụ.
Kamil Maciorowski


3

Nếu bạn muốn lấp đầy ổ cứng, hãy làm điều này:

dd if=/dev/zero of=zeros bs=1M

Bạn có thể tùy ý chỉ định số lượng nếu bạn muốn giới hạn kích thước, nhưng nếu bạn bỏ qua số đếm, nó sẽ chỉ chạy cho đến khi bạn hết dung lượng đĩa.

dd if=/dev/zero of=zeros bs=1M count=10240

Như psmears đã đề cập, bạn sẽ có hiệu suất tốt hơn nếu bạn đặt kích thước khối thành 1 MB (bs = 1M) thay vì 1 B (bs = 1). Việc này sẽ vẫn mất một lúc, nhưng nếu bạn muốn kiểm tra tiến trình của lệnh, hãy mở một bàn điều khiển riêng và chạy các lệnh sau:

ps aux | grep dd

Sử dụng PID của dd trong lệnh này (thay thế PID bằng PID của dd):

kill -USR1 PID

Sau đó đi xem thiết bị đầu cuối dd của bạn. Tất nhiên, điều này được sử dụng hạn chế khi bạn chỉ cố gắng lấp đầy ổ đĩa (bạn chỉ có thể sử dụng df hoặc du để kiểm tra dung lượng đĩa trống hoặc kích thước tệp tương ứng). Tuy nhiên, có những lúc khác, nó có ích để làm cho dd xuất tiến trình của nó.

Tín dụng bổ sung: một cách sử dụng thực tế để tạo không gian trống là sau đó, bạn có thể xóa các tệp "không" và dd toàn bộ phân vùng (hoặc đĩa, nếu bạn đã xóa tất cả các phân vùng) thành tệp hình ảnh đĩa (giả sử , đĩa-backup.dd), sau đó nén tệp. Không gian trống hiện có khả năng nén cao, vì vậy hình ảnh dd nén của bạn sẽ nhỏ hơn rất nhiều so với thiết bị khối ban đầu có nội dung chứa trong đó.

Shenanigans: nén một tệp số không lớn và gửi e-mail cho tất cả bạn bè của bạn. Nói với họ đó là một cái gì đó thực sự mát mẻ.


2

Bạn tạo tệp 1 TB không thưa thớt bằng lệnh sau:

dd if=/dev/zero of=bigfile1 bs=10000000000 count=512

Điều này rất hữu ích trong việc kiểm tra những gì xảy ra khi vượt quá hạn ngạch hoặc hệ thống tệp được lấp đầy.

df -h cho thấy không gian có sẵn ngày càng nhỏ 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.