Tạo một tệp kích thước lớn trong thời gian ngắn hơn


18

Tôi muốn tạo một tệp lớn ~ 10G chứa đầy số không và giá trị ngẫu nhiên. Tôi đã thử sử dụng:

dd if=/dev/urandom of=10Gfile bs=5G count=10

Nó tạo ra một tệp khoảng 2Gb và thoát với trạng thái thoát '0'. Tôi không hiểu tại sao?

Tôi cũng đã thử tạo tập tin bằng cách sử dụng:

head -c 10G </dev/urandom >myfile

Phải mất khoảng 28-30 phút để tạo ra nó. Nhưng tôi muốn nó được tạo ra nhanh hơn. Bất cứ ai cũng có một giải pháp?

Ngoài ra tôi muốn tạo nhiều tệp với cùng một mẫu ngẫu nhiên (giả) để so sánh. Có ai biết một cách để làm điều đó?


Chào mừng bạn đến với AskUbfox! Bạn có thể đang gặp lỗi dddo kích thước khối. Bạn có thể muốn xem bài đăng này stackoverflow.com/questions/6161823/. Nó có một số câu trả lời hay về cách tính kích thước khối tốt nhất, cũng như một số tập lệnh / chương trình người dùng và các đề xuất khác bằng cách sử dụng dd.
Không có thời gian

Câu trả lời:


12

Làm thế nào về việc sử dụng fallocate, công cụ này cho phép chúng tôi phân bổ không gian cho một tệp (nếu hệ thống tệp hỗ trợ tính năng này). Ví dụ: phân bổ 5GB dữ liệu cho một tệp có tên là 'ví dụ', người ta có thể làm:

fallocate -l 5G example

Điều này nhanh hơn nhiều so với dd, và sẽ phân bổ không gian rất nhanh.


Tập tin này có chứa dữ liệu ngẫu nhiên hay nó chứa bất cứ điều gì xảy ra trên không gian đĩa được phân bổ?
cprn

Nó sẽ chứa tất cả các số không. Về cơ bản, không gian được sắp xếp trước và nếu bạn không sửa đổi dữ liệu, nó sẽ được coi là bằng không.
Colin Ian King

Làm thế nào điều này có thể nhanh hơn bán phá giá /dev/zerosau đó?
cprn

1
Nó rất nhanh bởi vì đó là một cuộc gọi hệ thống có chức năng ngăn chặn sự phân bổ (ví dụ: nó dự trữ không gian nhưng không có I / O tối thiểu), trong khi dd'ing từ / dev / zero đến một tệp liên quan đến tải / đọc.
Colin Ian King

Tôi đang nâng cấp cái này Một câu hỏi cuối cùng ... Tôi đã sử dụng truncatetrong quá khứ và phát hiện ra rằng nó không phân bổ vật lý tệp trên thiết bị và chỉ tạo một tệp lớn tùy ý cho đến khi truy cập, bất kể dung lượng có sẵn. Bạn có chắc chắn đây không phải là trường hợp fallocate? Tôi sẽ kiểm tra nhưng tôi đang ở trên điện thoại di động ...
cprn

9

Bạn có thể sử dụng ddđể tạo một tệp chỉ gồm các số không. Thí dụ:

dd if=/dev/zero of=zeros.img count=1 bs=1 seek=$((10 * 1024 * 1024 * 1024 - 1))

Điều này rất nhanh vì chỉ một byte thực sự được ghi vào đĩa vật lý. Tuy nhiên, một số hệ thống tập tin không hỗ trợ này.

Nếu bạn muốn tạo một tệp chứa nội dung giả ngẫu nhiên, hãy chạy:

dd if=/dev/urandom of=random.img count=1024 bs=10M

Tôi đề nghị bạn sử dụng 10M làm kích thước bộ đệm ( bs). Điều này là do 10M không quá lớn, nhưng nó vẫn cung cấp cho bạn một kích thước bộ đệm tốt. Nó sẽ khá nhanh, nhưng nó luôn phụ thuộc vào tốc độ đĩa và sức mạnh xử lý của bạn.



1

Trả lời phần đầu tiên của câu hỏi của bạn:

Cố gắng viết một bộ đệm 5GB mỗi lần không phải là một ý tưởng hay vì kernel của bạn có thể không hỗ trợ điều đó. Nó sẽ không cung cấp cho bạn bất kỳ lợi ích hiệu suất trong mọi trường hợp. Viết 1M tại một thời điểm là tối đa tốt.


0

Câu hỏi này đã được mở 5 năm trước. Tôi chỉ vấp phải điều này và muốn thêm những phát hiện của tôi.

Nếu bạn chỉ đơn giản sử dụng

dd if=/dev/urandom of=random.img count=1024 bs=10M

nó sẽ hoạt động nhanh hơn đáng kể như được giải thích bởi xiaodongjie. Nhưng, bạn có thể làm cho nó nhanh hơn bằng cách sử dụng eatmydatanhư

eatmydata dd if=/dev/urandom of=random.img count=1024 bs=10M

eatmydatakhông vô hiệu hóa fsync làm cho đĩa ghi nhanh hơn.

Bạn có thể đọc thêm về nó tại https://flamingspork.com/projects/libeatmydata/ .


1
Cách tôi nhìn vào nó ddđủ nhanh để bắt đầu, và nó được gọi là libEAT-MY-DATA vì một lý do.
karel
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.