ฉันจะจำลองข้อผิดพลาดดิสก์เต็มในสภาพแวดล้อม Windows ได้อย่างไร

ฉันต้องเขียนสคริปต์ค้างคาวสำหรับสถานการณ์ทดสอบที่ซอฟต์แวร์ที่เรากำลังทดสอบไม่สามารถเขียนลงไฟล์ได้เนื่องจากข้อผิดพลาดของดิสก์เต็ม สคริปต์ทดสอบจะต้องเป็นแบบอัตโนมัติ เพื่อให้เราสามารถรันสคริปต์ทดสอบข้ามคืนได้ เป็นต้น สคริปต์ทดสอบต้องทำงานบนคอมพิวเตอร์เครื่องอื่นด้วย ดังนั้นการติดตั้งซอฟต์แวร์ เช่น เครื่องเสมือนจึงไม่ใช่วิธีแก้ปัญหาที่ดีที่สุดในกรณีนี้

ฉันจะจำลองข้อผิดพลาดนั้นในสภาพแวดล้อม Windows ได้อย่างไร


person Alceu Costa    schedule 09.02.2009    source แหล่งที่มา
comment
ดูเหมือนว่าผู้คนจะมองข้ามว่าคุณเขียนสถานการณ์ทดสอบ นั่นหมายความว่าสำหรับฉัน คุณจะต้องค้นหาวิธีแก้ปัญหาที่ทำงานโดยไม่คำนึงถึงสภาพแวดล้อม (ทำการทดสอบบนคอมพิวเตอร์เครื่องอื่น)   -  person Leonidas    schedule 09.02.2009
comment
Leonidas: ขอบคุณสำหรับความคิดเห็น ฉันได้อัปเดตคำถามแล้ว   -  person Alceu Costa    schedule 09.02.2009


คำตอบ (12)


คุณสามารถลองเขียนลงฟล็อปปี้ดิสก์เต็มได้

แก้ไข:

จากคำถามที่คุณแก้ไขแล้ว คุณสามารถตั้งค่าการแชร์เครือข่ายโดยไม่มีโควต้าพื้นที่ดิสก์และเขียนลงไปได้ ข้อผิดพลาดจะเกิดขึ้นโดยไม่คำนึงถึงผู้ใช้หรือเครื่องที่เข้าสู่ระบบ

person Patrick McDonald    schedule 09.02.2009
comment
หรือจากศตวรรษนี้ ดิสก์ USB เต็มรูปแบบ แบ่งพาร์ติชันใหม่หากจำเป็น - person gregmac; 09.02.2009
comment
+1 สำหรับดิสก์ USB/แท่ง/อะไรก็ตาม ใครจะใช้เวลาหลายชั่วโมงเพื่อรอฟล็อปปี้ดิสก์ตอบสนองในปี 2552? - person Arve Systad; 09.02.2009
comment
ใครยังมีฟล็อปปี้ดิสก์อีกต่อไป? แม้ว่าความตั้งใจจะดีก็ตาม ขออภัยที่มีชีวิตอยู่ในปี 1990! :) - person Patrick McDonald; 09.02.2009
comment
แผ่นฟลอปปีมีราคาแพงมากในขณะนี้ซึ่งไม่มีใครต้องการมันอีกต่อไป - person ; 09.02.2009
comment
สุดท้ายเราใช้โซลูชันฟล็อปปี้ดิสก์เนื่องจากข้อจำกัดของสภาพแวดล้อมในการทดสอบของเรา อย่างไรก็ตาม ฉันคิดว่าต้องมีวิธีแก้ปัญหาที่หรูหรากว่านี้สำหรับปัญหานี้ - person Alceu Costa; 15.06.2009
comment
การแชร์เครือข่ายโดยไม่มีโควต้าพื้นที่ดิสก์ดูเหมือนเป็นโซลูชันที่หรูหรากว่า ในขณะเดียวกัน ในศตวรรษนี้ ผู้ที่ต้องการฟล็อปปี้ไดรฟ์เพื่อติดตั้ง Windows 2003 บนเซิร์ฟเวอร์ที่มีการ์ด SCSI RAID ซึ่งไม่ได้ติดตั้งไดรเวอร์ไว้ใน Windows พวกเราโปรแกรมเมอร์โง่ๆ เราควรรู้ดีกว่านี้ - person Windows programmer; 15.06.2009

สำหรับ Windows XP หรือใหม่กว่า:

คำสั่งนี้สามารถรับจำนวนพื้นที่ว่างสำหรับไดรฟ์ c:\:

for /f "usebackq tokens=1-5" %%A in (`dir c:\ ^| find "bytes free"`) do (
    set FREE_SPACE=%%C
)

แทนที่ c:\ ด้วยไดรฟ์ของคุณตามความจำเป็น

จากนั้นคุณสามารถใช้พื้นที่ห่างจากค่านี้เพื่อให้คุณมีพื้นที่เล็กๆ ในการทำงาน:

set /a FREE_SPACE=FREE_SPACE-1024

หรือพื้นที่ว่างเท่าใดก็ได้ที่คุณต้องการเก็บไว้

คุณสามารถใช้คำสั่ง fsutil เพื่อสร้างไฟล์เพื่อเติมพื้นที่ว่างบนดิสก์:

fsutil file createnew c:\spacehog.dat %FREE_SPACE%

รันการทดสอบของคุณโดยเขียนลงในไดรฟ์ หลังจากที่คุณเขียนประมาณ 1,024 ไบต์ เนื้อที่ก็จะหมด

person Patrick Cuff    schedule 09.02.2009
comment
นี่คือสิ่งที่ฉันใช้และมันใช้งานได้ดี การติดตั้ง XP ของฉันคือ VM ดังนั้นฉันจึงทำสแน็ปช็อตก่อนหน้านี้ fsutil และดำเนินการทดสอบ - person Jared Oberhaus; 03.06.2009
comment
สิ่งนี้จะเกิดขึ้นก็ต่อเมื่อพื้นที่ว่างน้อยกว่า 2 GiB เท่านั้น เลขคณิตของ cmd ถูกจำกัดให้ใช้จำนวนเต็มที่ลงนามแบบ 32 บิต ฉันเดาว่าในทศวรรษที่ผ่านมาคงเป็นเรื่องยากที่จะหาพื้นที่ว่างเล็กๆ น้อยๆ เพื่อให้สิ่งนี้ใช้งานได้ - person Joey; 27.04.2011

ดาวน์โหลดและติดตั้ง TrueCrypt จากนั้นคุณสามารถสร้างพาร์ติชั่นเสมือนขนาดใดก็ได้ที่คุณต้องการ (สองสามเมกะไบต์) ติดตั้งพาร์ติชั่นแล้วเติมเอกสารสองสามไฟล์ลงไป

person Rad    schedule 09.02.2009

อาจดูเหมือนมากไปหน่อย แต่สิ่งหนึ่งที่ฉันคิดได้ก็คือการใช้เครื่องเสมือน และตั้งค่าดิสก์เสมือนให้ใหญ่พอที่จะใส่ระบบปฏิบัติการได้ เติมไฟล์ขยะลงไปจนสุดขอบ จากนั้นรันโปรแกรมของคุณ

person ryeguy    schedule 09.02.2009

ตัวเลือกที่ดีที่สุด: โปรแกรมบริโภคของ Microsoft

เหตุผล:

  • ทดสอบดิสก์ระบบ (เทียบกับไดรฟ์แยกต่างหาก)
  • รวดเร็ว - รันโปรแกรมเพื่อเติมดิสก์ทันที หยุดเมื่อไม่ต้องการอีกต่อไป
  • ง่ายมาก - ไม่ต้องสร้างและลบไฟล์ ไม่มีพาร์ติชั่นทดสอบเพิ่มเติมแขวนอยู่ จำเป็นต้องมีการติดตั้ง แต่คุณสามารถใช้คำสั่งง่ายๆ ในภายหลังได้
  • มันเป็นสคริปต์ได้

ขั้นตอน:

  1. ติดตั้ง Windows Server 2003 Resource Kit Tools (ทำงานได้ดี บนวินโดวส์ 7)
  2. cd "%ProgramFiles(x86)%\Windows Resource Kits\Tools" (หรือทุกที่ที่ติดตั้งไว้)
  3. consume.exe -disk-space

เอาต์พุตคำสั่ง:

C:\Program Files (x86)\Windows Resource Kits\Tools>consume.exe
Universal Resource Consumer - Just an innocent stress program, v 0.1.0
Copyright (c) 1998, 1999, Microsoft Corporation

    consume RESOURCE [-time SECONDS]

RESOURCE can be one of the following:

    -physical-memory
    -page-file
    -disk-space
    -cpu-time
    -kernel-pool


C:\Program Files (x86)\Windows Resource Kits\Tools>consume.exe -disk-space
Consume: Message: Total disk space:         96049 Mb
Consume: Message: Free disk space:          14705 Mb
Consume: Message: Free per user space:      14705 Mb
Consume: Message: Attempting to use:        14705 Mb
Consume: Message: Reattempting to use:      14705 Mb
Consume: Message: Sleeping ...

ตัวเลือกอื่น:

  • Windows 7 มี คุณลักษณะฮาร์ดไดรฟ์เสมือน โดยพื้นฐานแล้วให้ทำดังต่อไปนี้: การจัดการคอมพิวเตอร์ > การจัดการดิสก์ > เมนูการดำเนินการ > สร้าง VHD > คลิกขวาที่ดิสก์และเตรียมใช้งาน > คลิกขวา
  • สร้างไฟล์ขนาดใหญ่ (ควรดำเนินการทันที) จนกว่าดิสก์ของคุณจะเต็มโดยใช้คำสั่งเชลล์หรือ Dummy File Generator โปรแกรมอื่น: SpaceHog
person Peter Tseng    schedule 08.06.2012
comment
ฟีเจอร์ฮาร์ดไดรฟ์เสมือนใน Windows 7 ช่วยฉันได้ ฉันแค่ต้องทดสอบข้อผิดพลาดเพื่อสร้างตรรกะตัวจัดการที่เหมาะสม ฉันสร้าง VHD ขนาด 10 MB การทำบัญชีของ WIndows ใช้พื้นที่ประมาณ 7 MB บน VHD ดังนั้นเมื่อฉันพยายามเขียนไฟล์ใดก็ตามที่มีขนาดใหญ่กว่า 3 MB ลงในดิสก์ มันจะแยกข้อผิดพลาดออกมา - person Snapman; 14.04.2015

สร้างพาร์ติชั่นรอง เติมไฟล์ขยะแล้วรันโปรแกรมของคุณที่นั่น

person Mizipzor    schedule 09.02.2009
comment
มีวิธีเขียนสคริปต์ที่ทำให้การสร้างพาร์ติชันเป็นการกำหนดค่าโดยอัตโนมัติหรือไม่? - person Alceu Costa; 09.02.2009

คุณสามารถตั้งค่า ramdisk ขนาดเล็กแล้วเขียนลงไปได้ ดูหน้านี้สำหรับ ผลิตภัณฑ์ ramdisk ฟรี

person M4N    schedule 09.02.2009

สร้างบัญชีผู้ใช้ใหม่ กำหนดโควต้า และใช้ runas เพื่อรันแอปของคุณในฐานะผู้ใช้นั้น (ไม่เหมือนกันทุกประการกับดิสก์เต็ม แต่ควรให้ผลลัพธ์ที่คล้ายกัน)

person Community    schedule 09.02.2009

ระบบปฏิบัติการจะตอบสนองต่อการเติมไดรฟ์ของระบบแตกต่างจากการเติมไดรฟ์อื่น ๆ และด้วยเหตุนี้แอปพลิเคชันของคุณก็จะทำเช่นนั้นเช่นกันใช่ไหม การเติมข้อมูลลงในไดรฟ์โดยไม่คำนึงถึงสื่อทางกายภาพที่ใช้จะไม่ใช่การทดสอบที่แม่นยำ

คุณไม่สามารถจำลองเหตุการณ์ระบบไฟล์สำหรับดิสก์เต็มได้หรือไม่ ทำไมคุณถึงต้องการรอจนกว่าดิสก์จะเต็ม? คุณไม่ต้องการตรวจสอบพื้นที่ดิสก์เป็นระยะและเตือนผู้ใช้เมื่อดิสก์มีเปอร์เซ็นต์การเติมหรือไม่ แทนที่จะรอจนกว่าพื้นที่ดิสก์เป็นเทอร์มินัล เพียงแค่ป้องกันไม่ให้แอปพลิเคชันของคุณทำงานจนกว่าปัญหาจะได้รับการแก้ไข การไม่ทำเช่นนั้นอาจส่งผลต่อข้อมูล IO และไม่สามารถกู้คืนได้!

ถ้าการทดสอบ มี จะเป็นการทดสอบการรวมแบบฮาร์ด การทำให้เครื่องเสมือนเป็นอัตโนมัติ การปรับใช้แอปพลิเคชัน จากนั้นเติมพื้นที่ที่เหลือด้วยสคริปต์แบบเรียกซ้ำก็เป็นไปได้

person Ed Blackburn    schedule 09.02.2009

สิ่งที่ดีที่สุดที่ใช้ได้กับคอมพิวเตอร์ทุกเครื่อง (เนื่องจากไม่จำเป็นต้องทำการทดสอบบนเครื่องเฉพาะ) ก็คือแรมไดรฟ์/แรมดิสก์ที่สามารถตั้งค่าได้ทันที

จนถึงขณะนี้พบเฉพาะ Virtual Disk SDK ดูที่นี่ ซึ่งอาจรวมอยู่ในกระบวนการ buzild ของคุณ

แนวคิดที่แตกต่าง: บางทีคอมพิวเตอร์ทดสอบของคุณอาจถูกตั้งค่าให้เขียนไปยังโฟลเดอร์เครือข่ายที่ใช้ร่วมกัน (ซึ่งเต็ม) เมานต์เป็นไดรฟ์

person Leonidas    schedule 09.02.2009

ฉันได้ทำการแก้ไขสคริปต์ด้านบนเพื่อให้เข้ากันได้กับ Windows 7... โดยพื้นฐานแล้วจะเพิ่มสวิตช์ "/-c" ให้กับคำสั่ง for วิธีนี้จะลบตัวคั่นหลักพันเนื่องจาก fsutil ไม่ชอบในคำสั่ง

for /f "usebackq tokens=1-5" %%A in (`dir /-c d:\ ^| find "bytes free"`) do (set FREE_SPACE=%%C)
fsutil file createnew d:\largefile.txt %FREE_SPACE%
person Derek    schedule 25.04.2011

ใช้เป้าหมาย iscsi ที่เล็กมาก

person johnny    schedule 09.02.2009