วิธีที่ง่ายและรวดเร็วในการสร้างไฟล์ที่มีขนาด 2 GB คืออะไร?
วิธีที่ง่ายและรวดเร็วในการสร้างไฟล์ที่มีขนาด 2 GB คืออะไร?
คำตอบ:
วิธีzero-fill (แก้ไขที่นี่เพื่อหลีกเลี่ยงปัญหาคอขวดของหน่วยความจำที่อาจเกิดขึ้น ) ใช้เวลา 17 วินาทีในการสร้างไฟล์ 10 GB บน SSD และทำให้อินเทอร์เฟซกราฟิกของ Ubuntu ไม่ตอบสนอง
$ 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สร้างไฟล์ขนาดใหญ่ทันทีโดยจัดการพื้นที่ดิสก์ที่จัดสรรโดยตรงของไฟล์:
$ 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
truncateสามารถใช้งานได้ทันทีและสร้างไฟล์แบบเบาบางซึ่งไม่ใช้พื้นที่ดิสก์จริงจนกว่าจะมีการเขียนข้อมูลในภายหลัง:
$ 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
คำสั่งเพื่อเขียนไฟล์ที่มีค่าเป็นศูนย์
dd if=/dev/zero of=outputFile bs=2G count=1
ใช้ G ในอาร์กิวเมนต์ size หากคุณต้องการคอมพิวเตอร์ (1024 * 1024 * 1024) กิกะไบต์หรือ GB หากคุณต้องการกิกะไบต์ (1000 * 1000 * 1000) มนุษย์
/dev/urandom
ในกรณีนั้น (ไม่ใช่การบล็อก แต่ไม่รับประกันว่าจะมีการสุ่มระดับเดียวกัน) การดึง 2 GB จากทั้งสองจะทำให้เอนโทรปีของระบบของคุณหมดลงอย่างสมบูรณ์ดังนั้นอย่าทำสิ่งเข้ารหัสลับเป็นเวลานานหลังจากนั้น
ftp://ftp.fsf.hu/testfiles/maketestfiles.sh
หรือ Seek คือขนาดของไฟล์ที่คุณต้องการในหน่วยไบต์ - 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
dd ... bs=2G count=1
อ่าน 2 GB ในหน่วยความจำ (ในการread(2)
โทรหนึ่งครั้ง) หากคุณมีแรงกดดันด้านความจำนั่นอาจไม่ใช่วิธีที่คุณควรทำ ยิ่งบล็อกที่มีขนาดเล็กลงอาจจะเร็วกว่าหากหมายถึงการเพจน้อย