พาร์ติชันของฉัน/dev/sda3
บนไดรฟ์ SSD ไม่มีระบบไฟล์ใด ๆ แต่มีขยะ ฉันจะดำเนินการ TRIM / DISCARD บนพาร์ติชันทั้งหมดได้อย่างไร
พาร์ติชันของฉัน/dev/sda3
บนไดรฟ์ SSD ไม่มีระบบไฟล์ใด ๆ แต่มีขยะ ฉันจะดำเนินการ TRIM / DISCARD บนพาร์ติชันทั้งหมดได้อย่างไร
คำตอบ:
หากเวอร์ชันของ 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 บนอุปกรณ์ส่วนใหญ่
blkdiscard
เลย คำสั่งที่เป็นอันตราย ... :)
WARNING: All data in the discarded region on the device will be lost!
ฉันรู้ว่าคำถามนี้ค่อนข้างเก่า แต่ ...
ง่ายวิธีการทำเช่นนี้ก็คือการสร้างระบบแฟ้ม ext4 mkfs.ext4
บนพาร์ติชันกับรุ่นที่ผ่านมาพอสมควร สิ่งแรกที่เครื่องมือนี้ทำคือตัดทั้งพาร์ติชัน เมื่อคุณทำเสร็จแล้วคุณสามารถเขียนทับข้อมูลที่สร้างขึ้นด้วยระบบไฟล์ใดก็ได้ที่คุณต้องการ
(ฉันเพิ่งทำสิ่งนี้เพื่อสร้างพาร์ติชัน vfat ใหม่บนการ์ด SD เช่น)
mkfs.ext4 -J size=4 -N1 /dev/my/device
-E lazy_journal_init
ปรากฏขึ้นจะส่งผลในการเขียนน้อยกว่า-J size=4
ไม่ (อ้างอิงจากการทดลองโดยใช้ไฟล์แบบกระจัดกระจายแทนที่จะเป็นฟิสิคัล SSD และdu
เพื่อตรวจสอบว่ามีการเขียนเป็นจำนวนเท่าใด)
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:2047
1: ฉันไม่สามารถตัดแต่งเริ่มต้นจากส่วนที่ 0 เพราะนั่นคือ MBR (ไม่เป็นเช่นนั้นสำหรับ GPT)
hdparm --trim-sector-ranges 2048:65535 67583:65535 133118:65535 ...
จะทิ้งพื้นที่ที่ใช้โดยพาร์ทิชันที่ฉันต้องการจะทำอย่างไร สามารถเขียนสคริปต์ได้ แต่ฉันจะไม่เขียนตอนนี้
นอกจากนี้เพื่อให้แน่ใจว่า: ฉันไม่ได้รับประกันอะไรที่นี่ฉันอาจมีส่วนที่ผิดพลาดทำการสำรองข้อมูลทุกอย่างก่อนที่จะใช้อย่างมีประสิทธิภาพ
หมายเหตุ : ถ้าคุณตัดพื้นที่ "ว่าง" ก่อนพาร์ติชั่นแรกอย่างที่ฉันแสดงให้แน่ใจว่าได้ติดตั้ง GRUB (หรือบูตโหลดเดอร์ใดก็ตามที่คุณใช้) ก่อนที่จะทำการรีบูตเนื่องจาก GRUB เก็บส่วนหนึ่งของมันไว้ในเซกเตอร์ . ไม่รู้จัก bootloaders อื่น ๆ แต่ฉันคิดว่ามันอาจจะเป็นอย่างนั้นดังนั้นระวัง
wiper.sh
ล้าสมัยไปแล้วfstrim
ซึ่งปลอดภัยกว่ามาก แต่สำหรับการใช้งานที่เฉพาะเจาะจงblkdiscard
ทั้งสองนี้ ในปี 2556 ไม่จำเป็นต้องเสี่ยงกับการคำนวณด้วยตนเอง
คุณสามารถดูสคริปต์ที่wiper.sh
มาพร้อมกับแพ็คเกจ hdparm มันใช้คำสั่ง hdparm --trim-sector-ranges
เพื่อตัดเซกเตอร์ว่างทั้งหมดบนพาร์ติชันอย่างน้อยถ้ามันมีระบบไฟล์ ext3 / 4 ไม่แน่ใจว่าสามารถใช้งานได้กับพาร์ติชันที่ไม่ฟอร์แมตหรือไม่ แต่คุณสามารถฟอร์แมตด้วย ext4 ได้ชั่วคราว
wiper.sh
จะตัดพาร์ติชันเกือบทั้งหมดยกเว้นเมทาดาทา ext4 แต่ฉันต้องการตัดพาร์ติชันทั้งหมด
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
นี่คือบทความที่น่าสนใจที่พูดถึงการใช้ HDDErase เพื่อเรียกใช้คุณสมบัติการลบที่ปลอดภัยในตัวของ SSD ซึ่งคุณควรได้รับตามที่คุณต้องการ:
blkdiscard --secure
ทำ