ฉันรู้วิธีสร้างไฟล์ว่างเปล่า:
touch /var/tmp/nullbytes
แต่ฉันจะสร้างไฟล์ 1MB ที่มี nullbytes บน commandline ด้วย bash ได้อย่างไร
ฉันรู้วิธีสร้างไฟล์ว่างเปล่า:
touch /var/tmp/nullbytes
แต่ฉันจะสร้างไฟล์ 1MB ที่มี nullbytes บน commandline ด้วย bash ได้อย่างไร
คำตอบ:
ด้วย GNU truncate
:
truncate -s 1M nullbytes
(สมมติว่าnullbytes
ไม่มีอยู่ก่อน) จะสร้างไฟล์ 1 ไฟล์ mebibyte นั่นคือไฟล์ที่ดูเหมือนเต็มไปด้วยเลขศูนย์ แต่ไม่มีเนื้อที่ว่างบนดิสก์
หากไม่มีtruncate
คุณสามารถใช้dd
แทน:
dd bs=1048576 seek=1 of=nullbytes count=0
(ด้วยdd
การใช้งานบางอย่างคุณสามารถแทนที่ 1048576 ด้วย1M
)
หากคุณต้องการจัดสรรพื้นที่ดิสก์บน Linux และระบบไฟล์บางระบบคุณสามารถทำได้:
fallocate -l 1M nullbytes
ที่จัดสรรพื้นที่โดยไม่ต้องเขียนข้อมูลลงในดิสก์จริง ๆ (พื้นที่สงวนไว้ แต่ทำเครื่องหมายว่าไม่เตรียมการ)
dd < /dev/zero bs=1048576 count=1 > nullbytes
จะเขียนเลขศูนย์ไปที่ดิสก์จริงหรือ นั่นคือประสิทธิภาพที่น้อยที่สุด แต่ถ้าคุณต้องการไดรฟ์ของคุณหมุนเมื่อเข้าถึงไฟล์นั้นนั่นคือสิ่งที่คุณต้องการ
หรือวิธีของ @ mikeserv เพื่อหลอกลวงdd
ให้สร้าง NUL ไบต์:
dd bs=1048576 count=1 conv=sync,noerror 0> /dev/null > nullbytes
ทางเลือกอื่นของ GNU head
ที่ไม่เกี่ยวข้องกับการระบุขนาดบล็อก (1M ใช้ได้, แต่ 10G จะไม่เป็นเช่นนั้น):
head -c 1M < /dev/zero > nullbytes
หรือเพื่อรับแถบความคืบหน้า:
pv -Ss 1M < /dev/zero > nullbytes
truncate
สำหรับสร้างไฟล์เปล่าเพื่อใช้เป็นวอลลุ่มสลับ ... มันจะไม่ทำงาน! ใช้dd
ในกรณีนี้แทน
dd
สามารถสร้างไฟล์กระจัดกระจายตามที่ฉันแสดงเช่นกัน
bs=1kx1k
... หรือ หรือ<&1 dd bs=1kx1k conv=sync,noerror count="$rpt" | cat >file
สำหรับตัวอักษรเขียนสิ่งที่ดิสก์ ไม่ใช่ 100% สำหรับประสิทธิภาพที่อาจสูญเสียไปในการบังคับให้เกิดข้อผิดพลาดในการอ่าน
dd if=/dev/zero of=/var/tmp/nullbytes count=1 bs=1M