เพื่อการทดสอบฉันต้องสร้างไฟล์ที่มีขนาดที่แน่นอน (เพื่อทดสอบขีด จำกัด การอัพโหลด)
คำสั่งในการสร้างไฟล์ที่มีขนาดที่แน่นอนบน Linux คืออะไร?
เพื่อการทดสอบฉันต้องสร้างไฟล์ที่มีขนาดที่แน่นอน (เพื่อทดสอบขีด จำกัด การอัพโหลด)
คำสั่งในการสร้างไฟล์ที่มีขนาดที่แน่นอนบน Linux คืออะไร?
คำตอบ:
dd if=/dev/zero of=upload_test bs=file_size count=1
ในกรณีที่file_size
มีขนาดของไฟล์ทดสอบของคุณในไบต์
dd
มีขีด จำกัด ของ 2 ^ 32 สำหรับค่าของตนเพื่อที่จะสร้างไฟล์ที่มีขนาดใหญ่กว่า 4 GB dd if=/dev/zero of=test bs=1M count=<size in megabytes>
มีเคล็ดลับ:
ได้โปรดสมัยใหม่นั้นง่ายกว่าและเร็วกว่า บน Linux (เลือกหนึ่งรายการ)
truncate -s 10G foo
fallocate -l 5G bar
จะต้องมีการระบุว่าtruncate
ในระบบไฟล์ที่สนับสนุนไฟล์กระจัดกระจายจะสร้างไฟล์กระจัดกระจายและfallocate
จะไม่ ไฟล์กระจัดกระจายเป็นหนึ่งที่หน่วยการจัดสรรที่ทำขึ้นไฟล์จะไม่ได้รับการจัดสรรจริงจนกว่าจะใช้ meta-data สำหรับไฟล์จะใช้พื้นที่มากพอสมควร แต่ไม่มีแนวโน้มว่าจะอยู่ใกล้ขนาดที่แท้จริงของไฟล์ คุณควรศึกษาข้อมูลเกี่ยวกับไฟล์ที่กระจัดกระจายสำหรับข้อมูลเพิ่มเติมเนื่องจากมีข้อดีและข้อเสียของไฟล์ประเภทนี้ ไฟล์ที่ไม่กระจัดกระจายมีการจัดสรรบล็อก (หน่วยการจัดสรร) ล่วงหน้าซึ่งหมายความว่าพื้นที่ถูกจองเท่าที่ระบบไฟล์เห็น นอกจากนี้fallocate
และtruncate
จะไม่ตั้งค่าเนื้อหาของไฟล์เป็นค่าที่ระบุเช่น dd
แทนเนื้อหาของไฟล์ที่จัดสรรด้วยfallocate
หรือtruncate
อาจเป็นค่าถังขยะใด ๆ ที่มีอยู่ในหน่วยที่จัดสรรระหว่างการสร้างและพฤติกรรมนี้อาจจะหรืออาจไม่ต้องการ dd
เป็นที่ช้าที่สุดเพราะมันจริงเขียนค่าหรือก้อนของข้อมูลที่จะสตรีมไฟล์ทั้งหมดตามที่ระบุไว้ด้วยนั้นเลือกบรรทัดคำสั่ง
ลักษณะการทำงานนี้อาจแตกต่างกัน - ขึ้นอยู่กับระบบไฟล์ที่ใช้และความสอดคล้องของระบบไฟล์นั้นกับมาตรฐานหรือข้อกำหนด ดังนั้นจึงขอแนะนำให้ทำการวิจัยที่เหมาะสมเพื่อให้แน่ใจว่ามีการใช้วิธีการที่เหมาะสม
truncate
แล้ว มันสร้างไฟล์ขนาดศูนย์โดยใช้ไวยากรณ์ข้างต้น 'man page' ของfallocate
บอกว่าไฟล์ที่สร้างนั้นว่างเปล่าspace
มากกว่าข้อมูล ดูเหมือนว่าจะไม่เป็นประโยชน์สำหรับบางกรณีเช่น "ใช้เวลานานแค่ไหนในการคัดลอกไฟล์ 1G"
brew install coreutils
แล้วคุณจะต้องทำเช่นนี้: นี้จะเพิ่มกรัมgtruncate -s 10G foo
ในด้านหน้าของคำสั่งเพื่อให้คุณต้องใช้มันเช่นนี้ หวังว่านี่จะช่วยได้!
NTFS
พาร์ติชัน
เพียงแค่ติดตามโพสต์ของ Tomคุณสามารถใช้ dd เพื่อสร้างไฟล์แบบกระจายได้เช่นกัน:
dd if=/dev/zero of=the_file bs=1 count=0 seek=12345
การทำเช่นนี้จะสร้างไฟล์ที่มี "รู" อยู่ในยูนิกซ์ส่วนใหญ่ - ข้อมูลจะไม่ถูกเขียนลงดิสก์หรือใช้พื้นที่ใด ๆ จนกว่าจะมีสิ่งอื่นที่ไม่ใช่ศูนย์เขียนลงไป
count=0
, bs * seek
กลายเป็นขนาดไฟล์
บน OSX (และ Solaris ดูเหมือนว่า) mkfile
คำสั่งก็มีให้เช่นกัน:
mkfile 10g big_file
ทำให้ไฟล์มีขนาด 10 GB ชื่อ "big_file" พบวิธีนี้ที่นี่
truncate
และ ยังใช้งานได้ตามที่อธิบายไว้ข้างต้นแม้ว่าจะใช้กับเมกะไบต์ก็ตาม fallocate
dd
m
M
ใช้คำสั่งนี้:
ถ้า dd = $ INPUT-FILE จาก = $ OUTPUT-FILE bs = $ BLOCK-SIZE count = $ NUM-BLOCKS
เพื่อสร้างขนาดใหญ่ (ว่าง) $INPUT-FILE=/dev/zero
ไฟล์ชุด ขนาดของไฟล์จะ
ไฟล์ใหม่ที่สร้างขึ้นจะเป็น
$BLOCK-SIZE * $NUM-BLOCKS
$OUTPUT-FILE
คุณสามารถทำได้โดยทางโปรแกรม:
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
int main() {
int fd = creat("/tmp/foo.txt", 0644);
ftruncate(fd, SIZE_IN_BYTES);
close(fd);
return 0;
}
วิธีนี้มีประโยชน์อย่างยิ่งต่อการmmap ในภายหลังไฟล์ในหน่วยความจำในภายหลัง
ใช้คำสั่งต่อไปนี้เพื่อตรวจสอบว่าไฟล์มีขนาดที่ถูกต้อง:
# du -B1 --apparent-size /tmp/foo.txt
ระวัง:
# du /tmp/foo.txt
อาจจะพิมพ์0เพราะมันถูกจัดสรรเป็นไฟล์ Sparseหากระบบไฟล์ของคุณรองรับ
ดูเพิ่มเติม: man 2 openและman 2 truncate
คุณสามารถทำได้:
[dsm@localhost:~]$ perl -e 'print "\0" x 100' > filename.ext
โดยที่คุณแทนที่ 100 ด้วยจำนวนไบต์ที่คุณต้องการเขียน
คุณมีคำตอบบางข้อ/dev/zero
สำหรับแหล่งข้อมูลของคุณ หากความเร็วในการอัพโหลดเครือข่ายการทดสอบของคุณนี้ไม่อาจจะเป็นความคิดที่ดีที่สุดถ้าแอพลิเคชันของคุณจะทำการบีบอัดใด ๆ ไฟล์เต็มของศูนย์การบีบอัดจริงๆดี ใช้คำสั่งนี้เพื่อสร้างไฟล์
dd if=/dev/zero of=upload_test bs=10000 count=1
ฉันสามารถบีบอัด upload_test
ลงไปประมาณ 200 ไบต์ ดังนั้นคุณสามารถทำให้ตัวเองอยู่ในสถานการณ์ที่คุณคิดว่าการอัปโหลดไฟล์ 10KB แต่จริง ๆ แล้วมันจะน้อยกว่ามาก
สิ่งที่ผมขอแนะนำให้ใช้แทน/dev/urandom
/dev/zero
ฉันไม่สามารถบีบเอาท์พุทได้/dev/urandom
มากเลย
/dev/zero
ดังนั้นจึง/dev/urandom
เป็นเรื่องดี
dd if=/dev/zero of=my_file.txt count=12345
มีคำตอบมากมาย แต่ก็ไม่มีใครอธิบายได้ว่ามีอะไรอีกที่สามารถทำได้ การค้นหาman pages สำหรับ ddเป็นไปได้ที่จะระบุขนาดของไฟล์ได้ดียิ่งขึ้น
นี่จะเป็นการสร้าง /tmp/zero_big_data_file.bin ที่เต็มไปด้วยเลขศูนย์ซึ่งมีขนาด 20 เมกะไบต์:
dd if=/dev/zero of=/tmp/zero_big_data_file.bin bs=1M count=20
นี่จะเป็นการสร้าง /tmp/zero_1000bytes_data_file.bin ที่เต็มไปด้วยเลขศูนย์ซึ่งมีขนาด 1000 ไบต์:
dd if=/dev/zero of=/tmp/zero_1000bytes_data_file.bin bs=1kB count=1
หรือ
dd if=/dev/zero of=/tmp/zero_1000bytes_data_file.bin bs=1000 count=1
เป็นคำสั่งเชลล์:
< /dev/zero head -c 1048576 > output
สิ่งนี้จะสร้างไฟล์ข้อความขนาด 4 MB ที่มีตัวอักษรแบบสุ่มในไดเรกทอรีปัจจุบันและชื่อ "4mb.txt" คุณสามารถเปลี่ยนพารามิเตอร์เพื่อสร้างขนาดและชื่อที่แตกต่างกัน
base64 /dev/urandom | head -c 4000000 > 4mb.txt
ใช้ fallocate
หากคุณไม่ต้องการรอดิสก์
ตัวอย่าง:
fallocate -l 100G BigFile
การใช้งาน:
Usage:
fallocate [options] <filename>
Preallocate space to, or deallocate space from a file.
Options:
-c, --collapse-range remove a range from the file
-d, --dig-holes detect zeroes and replace with holes
-i, --insert-range insert a hole at range, shifting existing data
-l, --length <num> length for range operations, in bytes
-n, --keep-size maintain the apparent size of the file
-o, --offset <num> offset for range operations, in bytes
-p, --punch-hole replace a range with a hole (implies -n)
-z, --zero-range zero and ensure allocation of a range
-x, --posix use posix_fallocate(3) instead of fallocate(2)
-v, --verbose verbose mode
-h, --help display this help
-V, --version display version