Làm thế nào tôi có thể nhanh chóng tạo một tập tin lớn?


26

Cách nhanh chóng và dễ dàng để tạo một tệp có kích thước 2 GB là gì?

Câu trả lời:


36

Các phương pháp zero-điền (ở đây sửa đổi để tránh tắc nghẽn bộ nhớ tiềm ẩn ) mất 17 giây để tạo ra một tập tin 10 GB trên một SSD và gây ra giao diện đồ họa của Ubuntu trở thành không phản hồi.

$ time sh -c 'dd if=/dev/zero iflag=count_bytes count=10G bs=1M of=large; sync'
10240+0 records in
10240+0 records out
10737418240 bytes (11 GB, 10 GiB) copied, 17.2003 s, 624 MB/s

real    0m17.642s
user    0m0.008s
sys     0m9.404s
$ du -B 1 --apparent-size large
10737418240     large
$ du -B 1 large
10737422336     large

fallocate tạo các tệp lớn ngay lập tức bằng cách thao tác trực tiếp không gian đĩa được phân bổ của tệp:

$ time sh -c 'fallocate -l 10G large; sync'

real    0m0.038s
user    0m0.000s
sys     0m0.016s
$ du -B 1 --apparent-size large
10737418240     large
$ du -B 1 large
10737422336     large

cắt ngắn cũng hoạt động ngay lập tức và tạo các tệp thưa thớt không sử dụng hết dung lượng đĩa thực cho đến khi dữ liệu được ghi sau này:

$ time sh -c 'truncate -s 10G large; sync'

real    0m0.014s
user    0m0.000s
sys     0m0.004s
$ du -B 1 --apparent-size large
10737418240     large
$ du -B 1 large
0       large

dd ... bs=2G count=1đọc 2 GB vào bộ nhớ (trong một read(2)cuộc gọi). Nếu bạn có áp lực bộ nhớ có lẽ không phải là cách để đi. Nhiều hơn, các khối nhỏ hơn có thể nhanh hơn nếu nó có nghĩa là phân trang ít hơn.
đất sét

19

Một cách dễ dàng là sử dụng ddlệnh để viết một tệp đầy số không.

dd if=/dev/zero of=outputFile bs=2G count=1
  • if = tập tin đầu vào
  • của = tập tin đầu ra
  • bs = byte

Sử dụng G trong đối số kích thước nếu bạn muốn máy tính (1024 * 1024 * 1024) gigabyte hoặc GB nếu bạn muốn con người (1000 * 1000 * 1000) gigabyte.


1
tôi sẽ chỉ thêm rằng nếu bạn không muốn tất cả các số không, bạn có thể chọn if = / dev / ngẫu nhiên
Denwerko

Mặc dù / dev / ngẫu nhiên sẽ mất nhiều thời gian hơn.
con-f-use

10
Sử dụng / dev / random sẽ mất một khủng khiếp rất nhiều thời gian. Sử dụng /dev/urandomtrong trường hợp đó (nó không chặn, nhưng không được bảo đảm có cùng mức độ ngẫu nhiên). Việc rút 2 GB từ một trong hai thứ gần như chắc chắn sẽ làm cạn kiệt hoàn toàn entropy của hệ thống của bạn, vì vậy đừng làm bất cứ điều gì về mật mã trong một thời gian sau đó.
một CVn

1

ftp://ftp.fsf.hu/testfiles/maketestfiles.sh

hoặc Tìm kiếm là kích thước của tệp bạn muốn theo byte - 1.

dd if=/dev/zero of=filename.big bs=1 count=1 seek=1048575 # 1 MByte

dd if=/dev/zero of=filename.big bs=1 count=1 seek=10485759 # 10 MByte

dd if=/dev/zero of=filename.big bs=1 count=1 seek=104857599 # 100 MByte

dd if=/dev/zero of=filename.big bs=1 count=1 seek=1073741823 # 1024 MByte

dd if=/dev/zero of=filename.big bs=1 count=1 seek=42949672959 # 40960 MByte
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.