วิธีการเติม / ใช้พื้นที่ว่างในดิสก์จำนวนมากทันทีหรือไม่


45

บน Linux VM ฉันต้องการทดสอบ NAGIOS การตรวจสอบอย่างลึกซึ้งยิ่งกว่าการปิด VM หรือตัดการเชื่อมต่อ NIC เสมือน ฉันต้องการทดสอบหรือ "บังคับใช้สัญญาณเตือนพื้นที่ว่างในดิสก์" ผ่านการครอบครองพื้นที่ว่างหลาย% ในช่วงเวลาสั้น ๆ

ฉันรู้ว่าฉันสามารถใช้

dd if=/dev/zero of=/tmp/hd-fillup.zeros bs=1G count=50

หรือบางอย่างเช่นนั้น ... แต่ต้องใช้เวลาและโหลดระบบและต้องใช้เวลาอีกครั้งเมื่อลบไฟล์ทดสอบด้วย rm

มีวิธีที่รวดเร็ว (เกือบจะทันที) ในการเติมพาร์ติชั่นที่ไม่โหลดระบบและใช้เวลานานหรือไม่? ฉันกำลังคิดเกี่ยวกับสิ่งที่จัดสรรพื้นที่ แต่ไม่ได้ "เติม" มัน


ขออภัยลืมพูดถึงว่ามันเป็นระบบไฟล์ >> ext3
Axel Werner

คุณต้องอัปเกรดเป็น ext4 เพื่อรองรับการตกหล่น
Rui F Ribeiro

1
Zip bomb ใช้ได้เสมอ
galois

1
@jaska ทำให้เป็นคำตอบ มันเป็นความคิดแรกที่ฉันได้รับเมื่ออ่านชื่อ ...
Crowley

ทำไมคุณไม่ใช้/dev/full? (สมมติว่ามีอยู่) ลองใช้echo 'test' > /dev/fullDebian
Ismael Miguel

คำตอบ:


63

วิธีที่เร็วที่สุดในการสร้างไฟล์ในระบบ Linux นั้นใช้fallocate:

fallocate -l 50G file 

จากมนุษย์:

fallocate ใช้เพื่อจัดการกับพื้นที่ดิสก์ที่จัดสรรสำหรับไฟล์ไม่ว่าจะเป็นการจัดสรรคืนหรือจัดสรรล่วงหน้า
สำหรับระบบไฟล์ที่รองรับการเรียกใช้ระบบ fallocate การจัดสรรล่วงหน้าทำได้อย่างรวดเร็วโดยการจัดสรรบล็อกและทำเครื่องหมายว่าไม่มีการกำหนดค่าเริ่มต้นโดยไม่ต้องใช้ IO กับบล็อกข้อมูล สิ่งนี้เร็วกว่าการสร้างไฟล์โดยเติมด้วยศูนย์
รองรับ XFS (ตั้งแต่ Linux 2.6.38), ext4 (ตั้งแต่ Linux 3.0), Btrfs (ตั้งแต่ Linux 3.7) และ tmpfs (ตั้งแต่ Linux 3.5)


1
ทำไมคุณต้องใช้มันผ่านsudo?
gerrit

1
@gerrit เพิ่มที่ชี้ไปที่คำตอบ
Rui F Ribeiro

3
" fallocateต้องการสิทธิ์รูท"ไม่ได้อยู่ในระบบของฉัน (Linux Mint 17.3 ดาวน์สตรีมของ Ubuntu ดังนั้นจึงเป็น Debian) (ระบบไฟล์ ext4)
TJ Crowder

1
+1 แม้ว่า OP กล่าวอย่างชัดเจนว่าระบบไฟล์ของเขา ext3
syneticon-dj

1
@RuiFRibeiro ขอบคุณ! สำหรับ sles11sp4 ive สามารถสร้างไฟล์ได้ให้ฟอร์แมตด้วย ext4 แต่ไม่สามารถเมานต์ได้ในโหมด RW ต่อมาฉันพบข้อความเคอร์เนลใน / var / log / ข้อความที่กล่าวว่าสนับสนุน ext4 เป็นแบบอ่านอย่างเดียวเท่านั้น : /
Axel Werner

13

ทางเลือกอื่น ๆ ได้แก่ :

  1. เพื่อเปลี่ยนเกณฑ์การเตือนเป็นสิ่งที่ใกล้หรือต่ำกว่าการใช้งานปัจจุบันหรือ
  2. เพื่อสร้างพาร์ติชันทดสอบขนาดเล็กมากที่มี inodes จำกัด ขนาดหรือคุณลักษณะอื่น ๆ

ความสามารถในการทดสอบสิ่งต่าง ๆ เช่นการทำงานเป็นเปอร์เซ็นต์การสงวนรากถ้ามีก็อาจจะมีประโยชน์


เปอร์เซ็นต์ที่สงวนไว้ของรูทปกติคือ 10% เว้นแต่ว่าคุณจะปรับแต่งมันจะทำให้ระบบเสียมากเกินไปในพาร์ติชั่น / ดิสก์ที่ทันสมัย เมื่อกำหนดการเตือนภัยคุณควรจดบันทึกไว้ในบัญชี
Rui F Ribeiro

+1 สำหรับสิ่งแรก ร้อยครั้งจริง ทำไมนรกฉันควรสร้างบางสิ่งบางอย่างบนดิสก์เครื่อง? จะเกิดอะไรขึ้นหากมีบางสิ่ง (เช่น coredump งานแบทช์สร้างไฟล์ชั่วคราวขนาดใหญ่ ... ) เกิดขึ้นในช่วงเวลาที่การทดสอบของฉันและดิสก์ทั้งหมดถูกกินโดยไม่ตั้งใจ
Fiisch

2
@Fisch - เพราะเหตุใด เพื่อให้แน่ใจว่าเกณฑ์การแจ้งเตือนของคุณถูกต้องและคุณไม่ได้ทำอะไรบางอย่างเช่นการตั้งค่าเปอร์เซ็นต์อิสระของ inode โดยไม่ได้ตั้งใจแทนเปอร์เซ็นต์พื้นที่ว่างในดิสก์ (ซึ่งฉันเคยทำมาก่อน) หากสิ่งใดล้มเหลวเนื่องจากคุณเติมดิสก์ลงในขีด จำกัด การแจ้งเตือนแสดงว่าขีด จำกัด การแจ้งเตือนของคุณต่ำเกินไป - จุดแจ้งเตือนทั้งหมดคือว่าควรแจ้งเตือนคุณก่อนที่สิ่งต่าง ๆจะเริ่มแตก
Johnny

แมวดี แต่ไม่มีทางออกสำหรับฉัน ฉันไม่ได้ควบคุมการกำหนดค่า VM (ไม่สามารถเปลี่ยนพาร์ติชันหรือดิสก์เสมือน) และไม่มีการควบคุมผ่านเซิร์ฟเวอร์ NAGIOS
Axel Werner

2
@AxelWerner คุณสามารถลูปแบ็ค - เมาท์ไฟล์เป็นส่วน "ปลอม" ได้หรือไม่? นั่นยังคงช่วยให้คุณสามารถทดสอบได้โดยไม่กระทบอะไรเลย ฟอร์แมตด้วยหนึ่งในระบบไฟล์ที่รองรับและคุณสามารถเล่นกับ fallocate ได้เช่นกัน
Tonny

9
  1. fallocate -l 50G big_file

  2. truncate -s 50G big_file

  3. dd of=bigfile bs=1 seek=50G count=0

เนื่องจากทั้งสามวิธีสามารถเติมพาร์ติชันได้อย่างรวดเร็ว

ถ้าคุณชอบการใช้งานDDมักจะคุณสามารถลองกับแสวงหา เพียงแค่ตั้งค่าและการตั้งค่าseek=file_size_what_you_need count=0ที่จะบอกระบบว่ามีไฟล์และขนาดของมันคือสิ่งที่คุณตั้งไว้ แต่ระบบจะไม่สร้างมันขึ้นมา และใช้วิธีนี้คุณสามารถสร้างไฟล์ที่ใหญ่กว่าขนาดพาร์ติชัน


ตัวอย่างบนพาร์ติชันext4 ที่มีน้อยกว่า 3G ที่มีอยู่ ใช้ddเพื่อสร้างไฟล์ 5T ซึ่งมีอยู่เป็นเมทาดาทา - ซึ่งแทบไม่มีพื้นที่บล็อกเลย

df -h . ; dd of=biggerfile bs=1 seek=5000G count=0 ; ls -log biggerfile ; df -h .

เอาท์พุท:

Filesystem      Size  Used Avail Use% Mounted on
/dev/sda9        42G   37G  2.8G  94% /home
0+0 records in
0+0 records out
0 bytes copied, 4.9296e-05 s, 0.0 kB/s
-rw-rw-r-- 1 5368709120000 Jun 29 13:13 biggerfile
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda9        42G   37G  2.8G  94% /home

1
คุณสามารถเพิ่มข้อมูลเพิ่มเติมในคำตอบของคุณได้ไหม?
แมว

ฉันแค่เพิ่มการคิดในคำถามที่เสร็จสิ้นแล้วสำหรับคนที่ค้นหาคำถามเดียวกันด้วยวิธีอื่น ไม่สนใจมันถ้าคุณไม่ได้
Se ven

นี้count=0วิธีการที่น่าสนใจมากฉันได้เพิ่มตัวอย่าง
agc

7
โปรดทราบว่าddตัวอย่างข้างต้นอาจจัดสรรไฟล์ได้ง่าย ในกรณีนี้ขนาดไฟล์คือ 50G จริงๆแล้วมันใช้แค่บล็อก (หรือไม่เท่ากัน) และทำให้ดิสก์ไม่เต็ม YMMV
MAP

2
ฉันทดสอบข้อเสนอแนะของคุณในระบบไฟล์ ext3 ของฉัน มันไม่ทำงานตามที่คาดไว้ truncate และ dd สร้างไฟล์ที่มีขนาดไฟล์ใหญ่ แต่ "df -h" ไม่รู้จัก ยังคงแสดงพื้นที่ว่าง hd เดียวกัน
Axel Werner

0

คุณสามารถใช้ประโยชน์จากเครื่องมือ stress-ng ที่รองรับกับระบบที่ใช้ Linux เป็นจำนวนมาก:

stress-ng --fallocate 4 --fallocate-bytes 70% --timeout 1m --metrics --verify --times
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.