วิธีล้างพื้นที่ว่างใน Linux?


145

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

ฉันควรใช้อะไรเพื่อให้บรรลุสิ่งนี้


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

คำตอบ:


107

คำเตือน:ฮาร์ดแวร์ disk / SSD ที่ทันสมัยและระบบไฟล์ที่ทันสมัยอาจทำให้ข้อมูลในสถานที่ที่คุณไม่สามารถลบได้ดังนั้นกระบวนการนี้อาจยังคงเก็บข้อมูลไว้ในดิสก์ วิธีการล้างข้อมูลที่ปลอดภัยเพียงวิธีเดียวคือคำสั่ง ATA Secure Erase (หากนำไปใช้อย่างถูกต้อง) หรือการทำลายทางกายภาพ ดูที่ฉันจะลบข้อมูลทั้งหมดในฮาร์ดไดรฟได้อย่างน่าเชื่อถือได้อย่างไร

คุณสามารถใช้ชุดเครื่องมือที่เรียกว่าปลอดภัยลบ

sudo apt-get install secure-delete

มีสี่เครื่องมือ:

srm- ลบไฟล์ที่มีอยู่
smemอย่างปลอดภัย - ลบร่องรอยของไฟล์จาก ram อย่างปลอดภัย - ลบ
sfillพื้นที่ทั้งหมดที่ทำเครื่องหมายว่าว่างในฮาร์ดไดรฟ์ของคุณ
sswap- ล้างข้อมูลทั้งหมดจากพื้นที่สว็อปของคุณ

จากหน้าคนของ srm

srm ถูกออกแบบมาเพื่อลบข้อมูลบนสื่อในลักษณะที่ปลอดภัยซึ่งไม่สามารถกู้คืนได้โดยขโมยการบังคับใช้กฎหมายหรือภัยคุกคามอื่น ๆ อัลกอริธึมการลบจะขึ้นอยู่กับกระดาษ "การลบข้อมูลอย่างปลอดภัยจากแม่เหล็กและหน่วยความจำโซลิดสเตต" ที่นำเสนอในการประชุมความปลอดภัย Usenix ครั้งที่ 6 โดย Peter Gutmann หนึ่งในผู้เข้ารหัสลับพลเรือนชั้นนำ

กระบวนการลบข้อมูลที่ปลอดภัยของ srm จะเป็นดังนี้:

  • 1 ผ่านด้วย 0xff
  • สุ่ม 5 ครั้ง /dev/urandomใช้สำหรับ RNG ที่ปลอดภัยหากมี
  • 27 รอบด้วยค่าพิเศษที่กำหนดโดย Peter Gutmann
  • สุ่ม 5 ครั้ง /dev/urandomใช้สำหรับ RNG ที่ปลอดภัยหากมี
  • เปลี่ยนชื่อไฟล์เป็นค่าสุ่ม
  • ตัดไฟล์

เพื่อเป็นการรักษาความปลอดภัยเพิ่มเติมไฟล์จะถูกเปิดในโหมด O_SYNC และหลังจากผ่านการfsync()โทรแต่ละครั้ง srmเขียนบล็อกขนาด 32k เพื่อความรวดเร็วโดยการเติมบัฟเฟอร์ของดิสก์แคชเพื่อบังคับให้พวกเขาล้างข้อมูลและเขียนทับข้อมูลเก่าซึ่งเป็นของไฟล์


5
มันยากที่จะค้นหาหน้าแรก "เป็นทางการ" ปัจจุบันของการลบที่ปลอดภัย เวอร์ชั่นเก่าอาจอ้างว่าไม่มีรายงานบั๊ก แต่ในขณะเดียวกันก็ไม่มีระบบบั๊กแบบเปิดที่ฉันสามารถรายงานบั๊กที่พบ โฮมเพจการลบที่ปลอดภัยยังชี้ให้เห็นว่าอาจไม่ล้างข้อมูลบล็อกที่ไม่ได้ใช้ทั้งหมดขึ้นอยู่กับระบบไฟล์ที่คุณใช้ซึ่งเป็นความจริง
user39559

11
ด้วยฮาร์ดดิสก์ที่ทันสมัย ​​(ใหญ่กว่าประมาณ 20 GB) มันไม่มีประโยชน์เลยที่จะทำหลาย ๆ อย่างและรอนาน ดังนั้นการติดตั้งเครื่องมือพิเศษก็ไม่มีประโยชน์เช่นกัน (ซึ่งอาจอธิบายได้ว่าเหตุใดการลบความปลอดภัยจึงไม่มีหน้าหลักอีกต่อไป) cat /dev/zero >nosuchfile; rm nosuchfileเพียงแค่ทำเช่นนี้จากพาร์ทิชันที่เหมาะสม:
mivk

1
@mivk: ทำไมมันไร้ประโยชน์มากกว่าหนึ่งรอบ? เหตุใดจึงใช้ / dev / ศูนย์แทน / dev / random นั่นเป็นเพราะปัญหาเรื่องความเร็ว?
naught101

5
การใช้ / dev / ศูนย์เร็วกว่ามาก หากคุณเขียนพื้นที่ว่างจาก / dev / random เคอร์เนลจะต้องสร้างข้อมูลแบบสุ่มทั้งหมดในทันที มันเป็นวิธีที่สนุกสนานในการชมกระโดดโหลดเฉลี่ยของคุณขึ้นไปสูงสุดที่ ...
Dafydd

3
คำถามที่ตอบว่าจำเป็นต้องใช้กระดาษทำความสะอาดหลายชุดหรือไม่ที่นี่: เหตุใดการเขียนเลขศูนย์ (หรือข้อมูลแบบสุ่ม) ลงบนฮาร์ดไดรฟ์หลาย ๆ ครั้งจึงดีกว่าทำเพียงครั้งเดียว
sleske

71

วิธีที่เร็วที่สุดหากคุณต้องการเพียงบัตรเดียวและต้องการแทนที่ทุกอย่างด้วยศูนย์คือ:

cat /dev/zero > zero.file
sync
rm zero.file

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

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

dd if=/dev/zero of=zero.small.file bs=1024 count=102400
cat /dev/zero > zero.file
sync
rm zero.small.file
rm zero.file

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

dd if=/dev/zero of=zero.small.file bs=1024 count=102400
shred -z zero.small.file
cat /dev/zero > zero.file
sync
rm zero.small.file
shred -z zero.file
sync
rm zero.file

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

ทั้งหมดข้างต้นควรทำงานกับระบบไฟล์ใด ๆ

ขนาดไฟล์ จำกัด :

เนื่องจาก DanMoulding ชี้ให้เห็นในความคิดเห็นด้านล่างนี้อาจมีปัญหากับการ จำกัด ขนาดไฟล์ในบางระบบไฟล์

สำหรับ FAT32 มันจะเป็นข้อกังวลอย่างแน่นอนเนื่องจากข้อ จำกัด ของไฟล์ 2GiB: ปริมาณส่วนใหญ่จะใหญ่กว่านี้ในวันนี้ (8TiB เป็นขนาด จำกัด ของปริมาณ IIRC) คุณสามารถหลีกเลี่ยงปัญหานี้ได้โดยการวางท่อcat /dev/zeroเอาต์พุตขนาดใหญ่splitเพื่อสร้างไฟล์ขนาดเล็กจำนวนมากและปรับขั้นตอนการฉีกและลบตามลำดับ

ด้วย ext2 / 3/4 มันเป็นเรื่องที่น่าเป็นห่วงน้อย: ด้วยค่าเริ่มต้น / บล็อก 4K ทั่วไปขนาด จำกัด ของไฟล์คือ 2TiB ดังนั้นคุณจะต้องมีปริมาณมากเพื่อให้เป็นปัญหา (ขนาดปริมาณสูงสุดภายใต้เงื่อนไขเหล่านี้ คือ 16TiB)

ด้วย btrfs (ยังคงทดลอง) ทั้งไฟล์สูงสุดและขนาดโวลุ่มเป็น 16EiB ขนาดใหญ่

ภายใต้ NTFS ความยาวไฟล์สูงสุดจะมากกว่าความยาวระดับเสียงสูงสุดในบางกรณี

จุดเริ่มต้นสำหรับข้อมูลเพิ่มเติม:
http://en.wikipedia.org/wiki/Ext3#Size_limits
http://en.wikipedia.org/wiki/Btrfs
http://en.wikipedia.org/wiki/Ntfs#Scalability

อุปกรณ์เสมือน

ดังที่ได้กล่าวไว้ในความคิดเห็นเมื่อเร็ว ๆ นี้มีข้อควรพิจารณาเพิ่มเติมสำหรับอุปกรณ์เสมือน:

  • สำหรับดิสก์เสมือนที่ได้รับการจัดสรรอย่างกระจัดกระจายวิธีอื่น ๆ เช่นที่ใช้โดยzerofreeจะเร็วกว่า (แม้ว่าจะแตกต่างกันไปcatและddนี่ไม่ใช่เครื่องมือมาตรฐานที่คุณสามารถพึ่งพาได้ในระบบปฏิบัติการยูนิกซ์ที่เหมือนกัน)

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

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

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


4
เห็นได้ชัดว่าการ zeroing ง่าย ๆ สามารถทำได้ด้วยsecure-deleteเครื่องมือ: การใช้sfill -llzลดขั้นตอนทั้งหมดเป็นหนึ่งรอบที่เขียน '0 เท่านั้น
foraidt

ใช้เวลาสักครู่ เป็นวิธีที่เร็วที่สุดจริง ๆ หรือ ฉันเดาว่าการเขียนข้อมูล GB จะใช้เวลาสักครู่ ...
endolith

2
@endolith: หากคุณต้องการเว้นว่างในระบบไฟล์ที่ใช้งานอยู่คุณไม่จำเป็นต้องเขียนข้อมูลจำนวนมากผ่านทางระบบไฟล์ เครื่องมือลบความปลอดภัยที่แนะนำโดย fnord_ix อาจเร็วกว่าเพราะได้รับการปรับให้เหมาะกับงานประเภทนี้
David Spillett

2
@endolith: จากคำอธิบายใน man page ฉันคาดหวังว่าตัวแปรของ zerofree นั้นจะเร็วกว่าสำหรับดิสก์เสมือนที่ได้รับการจัดสรรอย่างกระจัดกระจายในความเป็นจริงมันอาจช้าลงสำหรับตัวจริงหรือขนาดคงที่หากทำการอ่านก่อนเขียน เพื่อยืนยันว่าบล็อกไม่มีเนื้อหา การสร้างบอลลูนสำหรับดิสก์เสมือนไม่ควรเกิดขึ้นเนื่องจากไดรเวอร์ดิสก์ที่กระจัดกระจายส่วนใหญ่ใช้ค่าศูนย์เป็น "ไม่จัดสรรบล็อกนี้" นอกจากนี้catและddจะมีอยู่บนสวยมาก ๆ Unix-a-OS เช่นที่พวกเขาได้รับการพิจารณาเครื่องมือมาตรฐานที่zerofreeอาจจะไม่ได้เว้นแต่จะได้รับการเพิ่มอย่างชัดเจน
David Spillett

1
@endolith: หลังจากที่กล่าวข้างต้นzerofreeแน่นอนว่าจะทำงานแน่นอน "สิ่งที่ทั้งระบบไฟล์ชั่วคราวเต็ม" สิ่งที่กล่าวถึงในหน้าคน (เกือบ แต่ไม่ได้ลดลงค่อนข้างเล็ก small.file pokery jiggery pokery ในตัวอย่างของฉัน) เป็นความกังวลของแท้หากคุณกำลังทำสิ่งนี้บนระบบที่ใช้งานอยู่ในปัจจุบันและzerofreeแน่นอนว่าจะเร็วขึ้นในอินสแตนซ์ที่เฉพาะเจาะจงมันได้รับการปรับให้เหมาะสมสำหรับ: อุปกรณ์บล็อกเสมือนที่ได้รับการจัดสรรอย่างกระจัดกระจาย แม้ว่าคุณจะไม่สามารถใช้การลบบนอุปกรณ์เสมือนเพื่อความปลอดภัยได้ แต่คำตอบที่แท้จริงในกรณีนี้คือการเข้ารหัสแบบเต็มอุปกรณ์ตั้งแต่เริ่มต้น
David Spillett

45

คำเตือน

ฉันตกตะลึงด้วยจำนวนโฟโตเรคที่สามารถเรียกคืนได้จากดิสก์ของฉันแม้หลังจากการล้างข้อมูล

ไม่ว่าจะมีความปลอดภัยมากขึ้นในการเติม "พื้นที่ว่าง" เพียง 1 ครั้งด้วย 0x00 หรือ 38 เท่าด้วยมาตรฐาน cabalistic ที่แตกต่างกันมากกว่าการอภิปรายทางวิชาการ ผู้เขียนบทความเกี่ยวกับการทำลายเอกสารทางน้ำเชื้อในปี 1996 ได้เขียนบทส่งท้ายด้วยตัวเองว่านี่เป็นสิ่งล้าสมัยและไม่จำเป็นสำหรับฮาร์ดแวร์ที่ทันสมัย ไม่มีกรณีเอกสารของข้อมูลที่ถูกแทนที่ด้วยศูนย์ทางกายภาพและกู้คืนหลังจากนั้น

ความจริงการเชื่อมโยงที่เปราะบางในขั้นตอนนี้เป็นระบบแฟ้ม ระบบไฟล์บางส่วนจองพื้นที่สำหรับการใช้งานพิเศษและไม่สามารถใช้เป็น "พื้นที่ว่าง" ได้ แต่ข้อมูลของคุณอาจจะมี ซึ่งรวมถึงภาพถ่ายอีเมลข้อความส่วนตัวส่วนบุคคล ฉันเพิ่งจะสำรองพื้นที่ + พื้นที่ + ext4 และได้เรียนรู้ว่า 5% ของhomeพาร์ติชันของฉันถูกจอง ฉันเดาว่านี่เป็นphotorecสิ่งที่ฉันพบมาก สรุป: วิธีการย่อยที่ไม่ได้เป็นสิ่งที่สำคัญที่สุดแม้วิธีการหลายผ่านยังคงทิ้งข้อมูลในสถานที่

คุณสามารถลอง# tune2fs -m 0 /dev/sdn0ก่อนที่จะติดตั้ง (หากเป็นพาร์ติชั่นรูทหลังจากรีบูตเครื่องให้ตรวจสอบว่ารัน-m 5หรือถอนการ-m 1ติดตั้งแล้ว)

แต่ถึงกระนั้นไม่ทางใดก็ทางหนึ่งอาจมีที่ว่างเหลืออยู่

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


วิธีที่รวดเร็ว (แนะนำ)

รันจากไดเร็กทอรีบนระบบไฟล์ที่คุณต้องการลบ:

dd if=/dev/zero of=zero.small.file bs=1024 count=102400
dd if=/dev/zero of=zero.file bs=1024
sync ; sleep 60 ; sync
rm zero.small.file
rm zero.file

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

นี่ควรจะดีพอสำหรับคนส่วนใหญ่

ทางช้า (หวาดระแวง)

ไม่มีกรณีเอกสารของการกู้คืนข้อมูลหลังจากการทำความสะอาดข้างต้น มันจะมีราคาแพงและเรียกร้องทรัพยากรถ้าเป็นไปได้เลย

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

dd if=/dev/urandom of=random.small.file bs=1024 count=102400
dd if=/dev/urandom of=random.file bs=1024
sync ; sleep 60 ; sync
rm random.small.file
rm random.file

ใช้เวลานานกว่ามาก

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

ช้ามาก (หวาดระแวงบ้า)

แม้แต่ผู้เขียนบทความย่อยที่เกี่ยวกับการย่อยในปี 1996 ก็ได้เขียนบทส่งท้ายซึ่งบอกว่าสิ่งนี้ล้าสมัยและไม่จำเป็นสำหรับฮาร์ดแวร์ที่ทันสมัย

แต่ถ้าคุณยังมีเวลาว่างมากมายและคุณไม่รังเกียจที่จะเสียดิสก์ด้วยการเขียนทับจำนวนมาก

dd if=/dev/zero of=zero.small.file bs=1024 count=102400
sync ; sleep 60 ; sync
shred -z zero.small.file
dd if=/dev/zero of=zero.file bs=1024
sync ; sleep 60 ; sync
rm zero.small.file
shred -z zero.file
sync ; sleep 60 ; sync
rm zero.file

หมายเหตุ: สิ่งนี้เทียบเท่ากับการใช้เครื่องมือลบความปลอดภัย


ก่อนที่จะแก้ไขโพสต์นี้เป็นบทความที่เขียนโดย David Spillett คำสั่ง "cat" สร้างข้อความแสดงข้อผิดพลาด แต่ฉันไม่สามารถเขียนความคิดเห็นในโพสต์ของคนอื่น


คุณสามารถแสดงความคิดเห็นภายใต้โพสต์คนอื่น ๆ ที่มี50 ชื่อเสียง
Gnoupi

1
catคำสั่งที่คาดว่าจะให้ "ไม่มีช่องว่างซ้าย" ข้อผิดพลาดในตัวอย่างของฉันในตอนท้ายของการทำงานของตน คุณสามารถซ่อนสิ่งนี้ได้โดยเปลี่ยนเส้นทาง stderr ไปที่/dev/nullหากเป็นปัญหา ฉันมักจะใช้pvมากกว่าcatหรือddเพื่อเรียงลำดับสิ่งนี้เพื่อให้ได้ตัวบ่งชี้ความก้าวหน้าที่มีประโยชน์
David Spillett

4
...raises the suspicion that it is actually encrypted data. You may die under torture for not revealing the decryption key.เฮ้นั่นคือสิ่งที่ฉันคิด ฉันเดาว่าหมายถึงผมหวาดระแวง ...
นาวิน

2
รูทสามารถใช้พื้นที่ที่สงวนไว้ได้เสมอ ดังนั้นถ้าคุณทำ zero-fill ของคุณเป็นรูทคุณจะสามารถเติมพื้นที่ที่สงวนไว้ 5% ได้เช่นกัน tunefs นั้นไม่จำเป็น ยังคงเป็นไปได้ว่าอาจมีข้อมูลในส่วนอื่น ๆ ของระบบไฟล์
Nate Eldredge

1
@NateEldredge คุณมีแหล่งข้อมูลใดบ้างที่จะระบุว่าการddทำงานในฐานะ root ให้การเข้าถึงระบบไฟล์มากกว่าที่ddไม่มีรูทหรือไม่? ฉันอยากจะเชื่อว่านี่เป็นเรื่องจริง แต่ไม่สามารถดูเหตุผลได้ในขณะนี้
Hashim

27

มียูทิลิตี้ zerofree เป็นอย่างน้อยใน Ubuntu:

http://manpages.ubuntu.com/manpages/natty/man8/zerofree.8.html

   zerofree — zero free blocks from ext2/3 file-systems

   zerofree  finds  the  unallocated, non-zeroed blocks in an ext2 or ext3
   filesystem (e.g. /dev/hda1) and fills them with zeroes. This is  useful
   if  the  device  on  which this file-system resides is a disk image. In
   this case, depending on the type of disk image, a secondary utility may
   be  able  to  reduce the size of the disk image after zerofree has been
   run.

   The usual way to achieve  the  same  result  (zeroing  the  unallocated
   blocks)  is to run dd (1) to create a file full of zeroes that takes up
   the entire free space on the drive, and then delete this file. This has
   many disadvantages, which zerofree alleviates:

      ·  it is slow;

      ·  it makes the disk image (temporarily) grow to its maximal extent;

      ·  it  (temporarily)  uses  all  free  space  on  the disk, so other
         concurrent write actions may fail.

   filesystem has to be unmounted or mounted  read-only  for  zerofree  to
   work.  It  will exit with an error message if the filesystem is mounted
   writable. To remount the  root  file-system  readonly,  you  can  first
   switch to single user runlevel (telinit 1) then use mount -o remount,ro
   filesystem.

ตรวจสอบลิงค์นี้เกี่ยวกับ zerofree: การรักษาภาพระบบไฟล์เบาบาง - มันมาจากผู้เขียน - Ron Yorston (9 สิงหาคม 2012)


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

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

สิ่งนี้ยังมาพร้อมกับ CentOS
davidgo

3

ต่อไปนี้เป็นวิธีใช้ GUI

  1. ติดตั้งBleachBit
  2. เรียกใช้ในฐานะรูทด้วยการคลิกแอปพลิเคชัน - เครื่องมือระบบ - BleachBit ในฐานะผู้ดูแลระบบ
  3. ในการตั้งค่าบอกเส้นทางที่คุณต้องการ โดยทั่วไปแล้วพวกเขาเดาดี คุณต้องการรวมหนึ่งเส้นทางที่เขียนได้สำหรับแต่ละพาร์ติชัน โดยทั่วไปคือ / home / ชื่อผู้ใช้และ / tmp ยกเว้นว่าเป็นพาร์ติชันเดียวกันซึ่งในกรณีนี้ให้เลือกหนึ่งรายการ
  4. ทำเครื่องหมายที่กล่องระบบ - เช็ดพื้นที่ว่างในดิสก์
  5. คลิกที่ลบ

ความก้าวหน้าของ BleachBit มากกว่า dd (ซึ่งเป็นสิ่งที่ดีมาก) คือเมื่อดิสก์เต็มในที่สุด BleachBit จะสร้างไฟล์ขนาดเล็กเพื่อล้างไอโหนด (ซึ่งมีข้อมูลเมตาเช่นชื่อไฟล์เป็นต้น)


ตรวจสอบไพ ธ อนซอร์สของ Bleachbit สำหรับการทำความสะอาดช่องว่างจากไดรฟ์เพื่อตัวคุณเอง
shadowbq

2

ฉันใช้ddเพื่อจัดสรรไฟล์ใหญ่หนึ่งไฟล์ขึ้นไปเพื่อเติมพื้นที่ว่างแล้วใช้ยูทิลิตี้การลบที่ปลอดภัย

ในการจัดสรรไฟล์ด้วย dd ลอง:

dd if=/dev/zero of=delete_me bs=1024 count=102400

จะสร้างไฟล์ชื่อdelete_meที่มีขนาด 100 MB (นี่bsคือ "ขนาดบล็อก" ตั้งค่าเป็น 1k และcountเป็นจำนวนบล็อกที่จะจัดสรร)

จากนั้นใช้ยูทิลิตี้ลบที่ปลอดภัยที่คุณชื่นชอบ (ฉันใช้shredอยู่) กับไฟล์ที่สร้างขึ้น

แต่ให้สังเกตสิ่งนี้: การบัฟเฟอร์หมายความว่าแม้ว่าคุณทำทั้งดิสก์คุณอาจไม่ได้ทุกอย่าง!


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


โอ้ถ้าหน่วยความจำทำหน้าที่ฉันฉันลองscrubอีกครั้งและมันทำให้ระบบไฟล์ทั้งหมดเสียหาย โชคดีที่ฉันมีความรู้สึกที่ดีในการทดลองครั้งแรกในระบบไฟล์ทดสอบไม่ใช่ข้อมูลจริงของฉัน
landroni

2

เช็ดไดรฟ์ด้วยความเร็วสูงสุด

คำแนะนำทั่วไปสำหรับการเข้ารหัสไดรฟ์ในปัจจุบันจะบอกให้คุณทราบถึงการล้างข้อมูลไดรฟ์ก่อน

คำสั่งด้านล่างจะเติมไดรฟ์ของคุณด้วยรหัส AES

ใช้ซีดีสดหากคุณต้องการล้างข้อมูลไดรฟ์สำหรับบูตหลัก

เปิดเทอร์มินัลและยกระดับสิทธิ์ของคุณ:

sudo bash

ให้เราแสดงรายการไดรฟ์ทั้งหมดในระบบเพื่อความปลอดภัย:

cat /proc/partitions

หมายเหตุ: แทนที่/dev/sd{x}ด้วยอุปกรณ์ที่คุณต้องการเช็ด

คำเตือน: นี่ไม่ใช่สำหรับมือสมัครเล่น! คุณสามารถทำให้ระบบของคุณไม่สามารถบูตได้ !!!

sudo openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" -nosalt < /dev/zero > /dev/sd{x}

ฉันตกตะลึงที่ความรวดเร็วนี้


2

คุณอาจมีแพ็คเกจ GNU coreutilsติดตั้งอยู่แล้วในระบบของคุณ มันมีคำสั่งฉีก


4
ฉีกจะไม่ทำความสะอาดพื้นที่ดิสก์ที่ไม่ได้ใช้โดยไม่ต้องทำให้มันเป็นไฟล์แรก ...
dmckee

2

คุณสามารถล้างพื้นที่ว่างของคุณโดยใช้แพ็คเกจการลบที่ปลอดภัย

ในแพ็คเกจนั้นคุณสามารถค้นหาsfillเครื่องมือที่ออกแบบมาเพื่อลบข้อมูลที่อยู่บนพื้นที่ว่างในสื่อที่ปลอดภัยซึ่งไม่สามารถกู้คืนได้โดยโจรการบังคับใช้กฎหมายหรือภัยคุกคามอื่น ๆ

ในการติดตั้งแพ็คเกจการลบที่ปลอดภัยใน Linux (Ubuntu) ให้ติดตั้งโดยใช้คำสั่งต่อไปนี้:

$ sudo apt-get install secure-delete

จากนั้นหากต้องการลบข้อมูลของคุณไม่มีพื้นที่ว่างลองคำสั่งต่อไปนี้:

sfill -f -v -ll /YOUR_MOUNTPOINT/OR_DIRECTORY

โดยที่ / YOUR_MOUNTPOINT / OR_DIRECTORY เป็นจุดต่อเชื่อม ( df -h, mount) หรือไดเรกทอรีเพื่อล้างพื้นที่ว่าง

อ่านคู่มือได้ที่http://manpages.ubuntu.com/manpages/hardy/man1/sfill.1.html


1

ใช้ dd และปล่อยพื้นที่ว่างให้เป็นศูนย์ มันเป็นข้อมูลเกี่ยวกับตำนานที่จำเป็นต้องเขียนทับหลาย ๆ ครั้ง (เพียงแค่ถาม peter guntmann) และข้อมูลสุ่มเมื่อเทียบกับ 1 ของ 0 นั้นแสดงถึงกิจกรรมที่ผิดธรรมชาติ ผลลัพธ์ที่ได้คือไดรฟ์ที่สะอาดและใช้เวลาน้อย นอกจากนี้โปรแกรมลบที่ปลอดภัยไม่สามารถรับประกันได้ว่าพวกเขาจะเขียนทับไฟล์จริงบนระบบไฟล์ที่ทันสมัย ​​(ทำเจอร์นัล) ทำสิ่งที่ชอบด้วยตัวคุณเองและรับโฟโตเรคสแกนไดรฟ์ของคุณเพื่อดูเลอะเลือนเช็ดด้วย 1 และเลือกเป็นศูนย์ด้วยรูปแบบที่ไม่ต้องแตะต้อง ถ้า photorec ยังค้นหาสิ่งต่าง ๆ อยู่โปรดจำไว้ว่ามันกำลังสแกนทุกอย่างที่มีดังนั้นให้ทำอย่างนี้อีกครั้งกับผู้ใช้รูท

โปรดจำไว้ว่าซีไอเอ / fbi / nsa ไม่มีเครื่องแฟนซีที่สามารถอ่านสถานะที่แท้จริงของบิตสื่อแม่เหล็กของคุณ นั่นเป็นเพียงกระดาษที่เขียนเมื่อนานมาแล้ว "what-if" คุณจะต้องเช็ด 1 ครั้งเท่านั้น


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

@ gronostaj: "มันเป็นข้อมูลที่เป็นตำนานจำเป็นต้องมีการเขียนทับหลายครั้ง" สำหรับไดรฟ์ที่ทันสมัยอย่างน้อยได้รับการพิสูจน์จากการศึกษาหลายครั้ง การผ่าน 30+ ที่แนะนำโดย Gutmann นั้นไม่จำเป็นอีกต่อไปตามที่ผู้เขียนยอมรับ
Karan

1

ง่ายกว่าคือการใช้สครับ :

scrub -X dump

สิ่งนี้จะสร้างdumpโฟลเดอร์ในตำแหน่งปัจจุบันและสร้างไฟล์จนกว่าดิสก์จะเต็ม คุณสามารถเลือกรูปแบบด้วย-pตัวเลือก ( nnsa|dod|bsi|old|fastold|gutmann)

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


หากหน่วยความจำทำหน้าที่ฉันฉันลองscrubอีกครั้งและมันทำให้ระบบไฟล์ทั้งหมดเสียหาย โชคดีที่ฉันมีความรู้สึกที่ดีในการทดลองครั้งแรกในระบบไฟล์ทดสอบไม่ใช่ข้อมูลจริงของฉัน
landroni

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

1
จริง พยายามscrub -X dump_dirและดูเหมือนว่าจะทำงานได้ดี BTW ติดตั้งบน Ubuntu 14.04 apt-get install scrubตรงไปตรงมามาก:
landroni

1

นี่คือสคริปต์ "sdelete.sh" ที่ฉันใช้ ดูความคิดเห็นเพื่อดูรายละเอียด

# Install the secure-delete package (sfill command).

# To see progress type in new terminal:
# watch -n 1 df -hm

# Assuming that there is one partition (/dev/sda1). sfill writes to /.
# The second pass writes in current directory and synchronizes data.
# If you have a swap partition then disable it by editing /etc/fstab
# and use "sswap" or similar to wipe it out.

# Some filesystems such as ext4 reserve 5% of disk space
# for special use, for example for the /home directory.
# In such case sfill won't wipe out that free space. You
# can remove that reserved space with the tune2fs command.
# See http://superuser.com/a/150757
# and https://www.google.com/search?q=reserved+space+ext4+sfill

sudo tune2fs -m 0 /dev/sda1
sudo tune2fs -l /dev/sda1 | grep 'Reserved block count'

sudo sfill -vfllz /

# sfill with the -f (fast) option won't synchronize the data to
# make sure that all was actually written. Without the fast option
# it is way too slow, so doing another pass in some other way with
# synchronization. Unfortunately this does not seem to be perfect,
# as I've watched free space by running the "watch -n 1 df -hm"
# command and I could see that there was still some available space
# left (tested on a SSD drive).

dd if=/dev/zero of=zero.small.file bs=1024 count=102400
dd if=/dev/zero of=zero.file bs=1024
sync ; sleep 60 ; sync
rm zero.small.file
rm zero.file

sudo tune2fs -m 5 /dev/sda1
sudo tune2fs -l /dev/sda1 | grep 'Reserved block count'

1

ฉันพบโซลูชันง่าย ๆ ที่ทำงานบน Linux และบน MacOS ย้ายในโฟลเดอร์รูทของดิสก์และเรียกใช้คำสั่งนี้:

for i in $(seq 1 //DISKSPACE//); do dd if=/dev/zero of=emptyfile${i} bs=1024 count=1048576; done; rm emptyfile*;

โดยที่ // DISKSPACE // มีขนาดเป็น GB ของฮาร์ดดิสก์ของคุณ


0

บางครั้งฉันใช้ bash one-liner:

while :; do cat /dev/zero > zero.$RANDOM; done

เมื่อมันเริ่มบอกว่าดิสก์เต็มเพียงกดCtrl+ Cและลบzero.*ไฟล์ที่สร้างขึ้น

มันทำงานได้กับทุกระบบไม่ จำกัด ขนาดไฟล์
ละเว้นcat: write error: File too largeข้อผิดพลาดใด ๆ


0

นี่ไม่ใช่คำตอบ! เป็นเพียงความคิดเห็นสำหรับผู้ที่ต้องการใช้pv... ดังนั้นอย่ากังวลกับการลงคะแนน

บนLinux Mint 17.3คุณสามารถใช้pv( มุมมองไพพ์ ) เพื่อรับความคืบหน้าของการเขียน ตัวอย่างเช่น:

# Install pv (pipe view)
sudo apt-get install pv

# Write huge file of approximate size of /dev/sdb, using urandom data:
pv --timer --average-rate --progress --numeric --eta --interval 5 --size "$(blockdev --getsize64 /dev/sda )" /dev/urandom >rand.file

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

บน HD เก่ามากที่ฉันได้รับอัตราการส่งข้อมูลเกี่ยวกับ13 MB / sใช้/dev/urandomและประมาณ70 MB / s/dev/zeroเมื่อใช้ นี้น่าจะปรับปรุงต่อไปเมื่อใช้ดิบddหรือไม่catpv


-13

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


22
กลุ่มของเนื้อหาไฟล์ที่ต่อเนื่องนั้นยังคงอยู่บนดิสก์และอยู่ไกลจากความหมายหากตรวจสอบข้อมูลดิสก์ดิบโดยตรง
Alex B
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.