วิธีการ TRIM / DISCARD พาร์ติชัน SSD ทั้งหมดบน Linux


28

พาร์ติชันของฉัน/dev/sda3บนไดรฟ์ SSD ไม่มีระบบไฟล์ใด ๆ แต่มีขยะ ฉันจะดำเนินการ TRIM / DISCARD บนพาร์ติชันทั้งหมดได้อย่างไร


7
ฉันคิดว่าประเด็นคือเขาไม่ต้องการเขียนข้อมูลใด ๆ เขาต้องการให้ SSD ลบบล็อกแฟลช แต่ปล่อยว่างไว้เพื่อให้สามารถเขียนได้หรือที่เรียกว่าการทำให้ใหม่ไดรฟ์ SSD
Chris Thompson

1
ATA ปลอดภัยลบ wiki ata.wiki.kernel.org/index.php/ATA_Secure_Erase
joe

@ โจ: ลิงค์การลบ ATA ที่ปลอดภัยของคุณไม่ได้พูดถึง parititions ฉันไม่ต้องการลบไดรฟ์ทั้งหมดเพียงแค่พาร์ติชัน และฉันไม่ต้องการเสี่ยงที่จะลบไดรฟ์ทั้งหมดโดยไม่ตั้งใจ
จุด

11
@Doc: การกรอกข้อมูลพาร์ทิชันด้วยข้อมูลขยะค่อนข้างตรงข้ามกับความตั้งใจของ pts: มันจะบอก SSD ว่าพาร์ติชั่นนั้นถูกใช้งานอย่างสมบูรณ์ สิ่งนี้จะลดประสิทธิภาพและอายุการใช้งานของ SSD
Black

คำตอบ:


40

หากเวอร์ชันของ util-linux ของคุณใหม่พอ (กันยายน 2012) แสดงว่ามีเครื่องมือที่สร้างขึ้นblkdiscardเองนั่นคือวิธีที่ดีที่สุดในการทำสิ่งนี้:

sudo blkdiscard /dev/sda3

แต่ถ้าคุณต้องการความเข้ากันได้กับรุ่นลินุกซ์รุ่นเก่าอ่านต่อ ... มีหลายกรณีที่hdparm/ wiper.shปฏิเสธที่จะสัมผัสกับไดรฟ์เนื่องจากไม่ใช่พาร์ติชันดังนั้นเราจึงต้องการอะไรมากกว่านั้น

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

D=/dev/sda3 ; mkswap $D && swapon -d $D && swapoff $D && wipefs -o 0xff6 $D

สิ่งนี้จะออก DISCARD บนอุปกรณ์ส่วนใหญ่


1
ขอบคุณไม่รู้เรื่องblkdiscardเลย คำสั่งที่เป็นอันตราย ... :)
frostschutz

ทำไม? ฉันเพิ่งดูมันในคู่มือ:WARNING: All data in the discarded region on the device will be lost!
MrCalvin

9

ฉันรู้ว่าคำถามนี้ค่อนข้างเก่า แต่ ...

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

(ฉันเพิ่งทำสิ่งนี้เพื่อสร้างพาร์ติชัน vfat ใหม่บนการ์ด SD เช่น)


ขอบคุณสำหรับเคล็ดลับ! FYI หลังจาก TRIMming ให้เขียนบล็อกบางส่วนที่มีข้อมูลเมตาสำหรับระบบไฟล์ ext4 ที่ว่างเปล่าดังนั้นพาร์ติชั่นบางส่วนยังคงไม่ได้รับการตัดต่อ
pts

4
@pts คุณสามารถลดขนาดของข้อมูลเมตาได้ด้วยการลดขนาดวารสารและจำนวนของ inodes:mkfs.ext4 -J size=4 -N1 /dev/my/device
Aryeh Leib Taurog

2
@AryehLeibTaurog ใช้-E lazy_journal_initปรากฏขึ้นจะส่งผลในการเขียนน้อยกว่า-J size=4ไม่ (อ้างอิงจากการทดลองโดยใช้ไฟล์แบบกระจัดกระจายแทนที่จะเป็นฟิสิคัล SSD และduเพื่อตรวจสอบว่ามีการเขียนเป็นจำนวนเท่าใด)
kasperd

@kasperd การทดลองที่ชาญฉลาดพร้อมผลลัพธ์ที่น่าสนใจ! ขอบคุณ
Aryeh Leib Taurog

8

hdparm --trim-sector-range อยู่ในระดับต่ำควรพูดคุยกับ SSD โดยตรงดังนั้นจึงไม่ต้องพึ่งพาระบบไฟล์ สิ่งที่ wiper.sh ทำคือใช้โปรแกรมเฉพาะระบบไฟล์เพื่อทำแผนที่ภูมิภาค (ระบบไฟล์) ไปยัง (ฮาร์ดแวร์) ภาค SSD พวกเขาใช้ hdparm เพื่อตัดแต่ง

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

fdisk -l สามารถบอกคุณเริ่มต้นและขนาดของพาร์ทิชัน ให้ความสนใจกับหน่วยที่ใช้งานโดย fdisk และขนาดเซกเตอร์ของ SSD ของคุณ

ตัวอย่าง (SSD ของฉัน):

Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    39070079    19534016   83  Linux

จะทิ้งช่องว่างก่อนพาร์ทิชันนี้ผมสามารถตัด 2047 (512 ไบต์ขนาดบน SSD ของฉัน) ภาคเริ่มต้นจากภาค hdparm --trim-sector-ranges 1:20471: ฉันไม่สามารถตัดแต่งเริ่มต้นจากส่วนที่ 0 เพราะนั่นคือ MBR (ไม่เป็นเช่นนั้นสำหรับ GPT)

hdparm --trim-sector-ranges 2048:65535 67583:65535 133118:65535 ...จะทิ้งพื้นที่ที่ใช้โดยพาร์ทิชันที่ฉันต้องการจะทำอย่างไร สามารถเขียนสคริปต์ได้ แต่ฉันจะไม่เขียนตอนนี้

นอกจากนี้เพื่อให้แน่ใจว่า: ฉันไม่ได้รับประกันอะไรที่นี่ฉันอาจมีส่วนที่ผิดพลาดทำการสำรองข้อมูลทุกอย่างก่อนที่จะใช้อย่างมีประสิทธิภาพ

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


7
wiper.shล้าสมัยไปแล้วfstrimซึ่งปลอดภัยกว่ามาก แต่สำหรับการใช้งานที่เฉพาะเจาะจงblkdiscardทั้งสองนี้ ในปี 2556 ไม่จำเป็นต้องเสี่ยงกับการคำนวณด้วยตนเอง
กาเบรียล

6

คุณสามารถดูสคริปต์ที่wiper.shมาพร้อมกับแพ็คเกจ hdparm มันใช้คำสั่ง hdparm --trim-sector-rangesเพื่อตัดเซกเตอร์ว่างทั้งหมดบนพาร์ติชันอย่างน้อยถ้ามันมีระบบไฟล์ ext3 / 4 ไม่แน่ใจว่าสามารถใช้งานได้กับพาร์ติชันที่ไม่ฟอร์แมตหรือไม่ แต่คุณสามารถฟอร์แมตด้วย ext4 ได้ชั่วคราว


การจัดรูปแบบด้วย ext4 แล้วเรียกใช้wiper.shจะตัดพาร์ติชันเกือบทั้งหมดยกเว้นเมทาดาทา ext4 แต่ฉันต้องการตัดพาร์ติชันทั้งหมด
pts

2
@pts: ฉันขอแนะนำให้คุณดูที่รหัสของ wiper.sh และลองหาวิธีที่มันจะตัดทอนช่วงของการตัดแต่ง จากนั้นคุณสามารถส่งช่วงการตัดแต่งไปยัง hdparm ไปยัง TRIM พาร์ติชันทั้งหมดด้วยตนเอง
Jaap Eldering

4

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

ระวังblkdiscardให้ดีอย่าถามคำถามและไม่แสดงข้อมูลความคืบหน้า

หาก blkdiscard ไม่พร้อมใช้งานให้ใช้สคริปต์นี้และป้อนข้อมูลผลลัพธ์เป็น hdparm อาร์กิวเมนต์แรกคือจำนวนของส่วนที่จะตัดส่วนที่สองคือส่วนแรกที่จะตัดแต่ง

#! /bin/sh
# List ranges for hdparm --trim-sector-ranges-stdin
: ${MAXSECT=65535}
test $# = 2 || { echo "Usage: trimlist sectors offset" >&2; exit 1; }
sectors=$1
pos=$2
while test $sectors -gt 0; do
    if test $sectors -gt $MAXSECT; then
            size=$MAXSECT
    else
            size=$sectors
    fi
    echo $pos:$size
    sectors=$(($sectors-$size))
    pos=$(($pos+$size))
done

-1

นี่คือบทความที่น่าสนใจที่พูดถึงการใช้ HDDErase เพื่อเรียกใช้คุณสมบัติการลบที่ปลอดภัยในตัวของ SSD ซึ่งคุณควรได้รับตามที่คุณต้องการ:

http://www.windowsitpro.com/article/file-systems/q-how-can-i-reset-a-solid-state-disk-ssd-to-a-fully-erased-clean-state-


ขอบคุณสำหรับคำตอบ แต่ไม่ได้ผลเนื่องจาก 1) ลบไดรฟ์ทั้งหมด 2) ต้องใช้ Microsoft Windows และฉันกำลังมองหาโซลูชัน Linux
pts

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