วิธีการเปิดใช้งาน TRIM


189

ฉันรู้ว่าเคอร์เนล Linux รองรับ TRIM ตั้งแต่รุ่น 2.6.33 ดังนั้นควรมีการรองรับ TRIM ใน Ubuntu

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


ฉันเพิ่งทำตามคำแนะนำเหล่านี้ใน webupd8 ซึ่งให้ตัวเลือกที่ดีจริงๆ :-) webupd8.org/2013/01/enable-trim-on-ssd-solid-state-drives.htmlบางตัวฉันลองตัวเลือกอัตโนมัติตามที่อธิบายไว้ข้างต้นใน "Automatic TRIM" แต่พบว่าการตั้งค่า cron รายวันทำงานได้ดีขึ้นมากเมื่อตั้งค่าของฉัน
bmbaker

คำตอบ:


197

Ubuntu 14.10 เป็นต้นไป

ใน Ubuntu 14.10 และ 15.04 ตัดเกิดขึ้นโดยอัตโนมัติทุกสัปดาห์ใน SSDs fstrimสนับสนุนโดย

$ tail -n1 /etc/cron.weekly/fstrim 
/sbin/fstrim --all || true

ตั้งแต่ 15.04 Ubuntu ใช้ systemd และตัวจับเวลา ( man systemd.timer, Arch wiki )

systemctl list-timers
systemctl status fstrim.timer

Ubuntu 14.04

ตั้งแต่ Ubuntu 14.04 TRIM ตามกำหนดเวลาจะเปิดใช้งานตามค่าเริ่มต้นสำหรับ Intel, SAMSUNG, OCZ, Patriot และ Sandisk SSD หากคุณมีแบรนด์อื่นคุณสามารถปิดใช้งานการตรวจสอบผู้ขายโดยการเรียกใช้คำสั่งต่อไปนี้:

sed -i 's/exec fstrim-all/exec fstrim-all --no-model-check/g' /etc/cron.weekly/fstrim

(หรือเพียงแค่แก้ไขไฟล์/etc/cron.weekly/fstrimและเพิ่ม--no-model-check)

Ubuntu 13.10 และก่อนหน้านี้

มีสามวิธีในการดำเนินการ TRIM, คู่มือ, กำหนดเวลาและอัตโนมัติ:

ตัดด้วยตนเอง

ใน Ubuntu สามารถทำได้ด้วยfstrim:

sudo fstrim /

อย่างไรก็ตามไม่จำเป็นเมื่อกำหนดเวลาไว้หรือเปิดใช้งาน TRIM อัตโนมัติตามรายละเอียดในส่วนด้านล่าง

หมายเหตุ:สำหรับอูบุนตู 11.04และระบบก่อนหน้านี้ fstrim ไม่สามารถใช้ได้ดังนั้นคุณต้องใช้wiper.shที่มาพร้อมกับhdparmใน/usr/share/doc/hdparm/contrib/wiper.sh.gz

TRIM ที่กำหนดเวลาไว้ (แนะนำ)

นี้เป็นวิธีที่แนะนำในขณะนี้และมีการวางแผนที่จะเปิดใช้งานต่อเริ่มต้นสำหรับอูบุนตู 14.04 นี่คือวิธีการเปิดใช้งานด้วยตนเองใน Ubuntu รุ่นเก่า (11.10 ถึง 13.10):

สร้างไฟล์สคริปต์งาน CRON รายสัปดาห์:

gksudo gedit /etc/cron.weekly/fstrim

วางรหัสต่อไปนี้ในไฟล์จากนั้นบันทึกและปิดไฟล์:

#! /bin/sh  

# By default we assume only / is on an SSD. 
# You can add more SSD mount points, separated by spaces.
# Make sure all mount points are within the quotes. For example:
# SSD_MOUNT_POINTS='/ /boot /home /media/my_other_ssd'  

SSD_MOUNT_POINTS='/'  

for mount_point in $SSD_MOUNT_POINTS
do  
    fstrim $mount_point  
done

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

ทำให้สคริปต์เรียกใช้งานได้:

sudo chmod +x /etc/cron.weekly/fstrim

และในที่สุดก็ทดสอบมัน:

sudo /etc/cron.weekly/fstrim

หากคุณเห็นว่าไม่มีข้อผิดพลาดงาน cron ของคุณควรจะทำงานได้ดี

TRIM อัตโนมัติ (คัดค้านช้า)

TRIM อัตโนมัติได้รับการสนับสนุนตั้งแต่ Ubuntu 10.10 (เคอร์เนล 2.6.33) ด้วยระบบไฟล์ EXT4 อย่างไรก็ตามการส่งคำสั่ง TRIM ไปยัง SSD แบบเรียลไทม์ - หลังจากการลบทุกครั้ง - ได้รับการยอมรับว่าทำให้การลบช้ากว่าปกติในบางไดรฟ์ ดังนั้น TRIM ที่กำหนดเวลารายสัปดาห์ผ่านงาน cron (อธิบายไว้ข้างต้น) จึงได้รับการแนะนำอีกครั้ง

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

sudo cp /etc/fstab ~/fstab-backup
gksudo gedit /etc/fstab

เพิ่มdiscardไปยังรายการตัวเลือก fstab (คั่นด้วยเครื่องหมายจุลภาค) สำหรับไดรฟ์ SSD หรือแต่ละพาร์ติชัน

UUID=00000000-0000-0000-0000-000000000000  /  ext4  discard,errors=remount-ro  0  1

ปิดและบันทึก fstab จากนั้นรีบูตและ TRIM อัตโนมัติควรทำงาน

ทดสอบ TRIM อัตโนมัติ

ในการทดสอบว่า TRIM ทำงานได้หรือไม่ให้ใช้คำสั่งต่อไปนี้ ( แหล่งที่มา ):

cd  / # Replace with SSD file system
sudo dd if=/dev/urandom of=tempfile count=100 bs=512k oflag=direct
sudo hdparm --fibmap tempfile

จากเอาต์พุตคัดลอกหมายเลขใต้begin_LBAและตรวจสอบชื่ออุปกรณ์ของ SSD ของคุณ: System->Administration->Disk Utilityเช่นsda, sdb, sdc ...

รันสิ่งต่อไปนี้ แต่แทนที่[ADDRESS](start_LBA) และsdX(ชื่ออุปกรณ์ SSD) ด้วยรายละเอียดที่ได้รับด้านบน

sudo hdparm --read-sector [ADDRESS] /dev/sdX 

เอาต์พุตควรเป็นสตริงอักขระที่ยาวสำหรับภาคเหล่านั้น

sudo rm tempfile
sync

ทำซ้ำhdparmคำสั่งจากด้านบน:

sudo hdparm --read-sector [ADDRESS] /dev/sdX 

หากคุณมีค่าเป็นศูนย์เท่านั้น TRIM อัตโนมัติจะทำงาน อย่างไรก็ตามหากหลังจากลบไฟล์แล้วเซกเตอร์ยังคงไม่ว่างเปล่าให้รอสักครู่แล้วรันคำสั่งอีกครั้ง


5
การทดสอบ TRIM อาจใช้งานไม่ได้จริงเช่นนั้น: serverfault.com/a/401506/60525
chrishiestand

1
@Uli โปรดใครสักคนช่วยฉัน ดูเหมือนจะไม่ทำงานสำหรับฉัน ฉันมี 4 พาร์ทิชันใน SSD ของฉัน/ /boot /usrและ/optและฉันได้ใช้ HDD /homeอีกส่วนหนึ่งสำหรับฉัน ฉันไปที่cd / #sdcและทำตามคำแนะนำต่อไป แต่ฉันไม่เคยได้รับศูนย์ ขอบคุณล่วงหน้า!
BugShotGG

1
@lightrush: แก้ไขที่ยอดเยี่ยม! ขอขอบคุณที่รักษาคำตอบล่าสุด
Uli

1
คุณอาจต้องการเพิ่มคำสั่งsyncafter ddเนื่องจากอย่างน้อยในระบบของฉัน tempfile จะไม่ถูกสร้างขึ้นทันทีดังนั้น hdparm จึงไม่ได้รายงานอะไรเลย
Andreas J.

2
systemd จัดการสิ่งนี้ทันที sudo systemctl status fstrim.timer
ลูกโป่ง

28

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

ค้นหาคำแนะนำของฉันเกี่ยวกับการตั้งค่า TRIM สำหรับพาร์ติชันที่เข้ารหัสของ LUKS ที่นี่


วิธีการเปิดใช้งาน TRIM ใน LUKS Encrypted Partitions ใน Ubuntu และ Debian


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

"TRIM ทำให้ SSD สามารถจัดการค่าโสหุ้ยการเก็บขยะซึ่งจะทำให้การเขียนในอนาคตช้าลงอย่างมากไปยังบล็อกที่เกี่ยวข้องล่วงหน้า"

ตัวอย่างการตั้งค่า

โน้ตบุ๊กที่มี SSD เป็นไดรฟ์เดียว, Linux ติดตั้งในพาร์ติชันรากเดี่ยว ext4 LVM พร้อมพาร์ทิชัน LVM swap ทั้งบนโลจิคัลพาร์ติชันที่เข้ารหัส LUKS

SSD: / dev / sda

sudo fdisk -l /dev/sda
/dev/sda1               # boot partition (83) (unencrypted, ext4)
/dev/sda2               # extended partition
/dev/sda5               # logical partition (83) with LUKS encryption

ls /dev/mapper
/dev/mapper/sda5_crypt         # encrypted LUKS device in physical /dev/sda5 partition
/dev/mapper/volumegroup-root   # rootpartition sda5_crypt
/dev/mapper/volumegroup-swap   # swap partition sda5_crypt

ทำอย่างไร

  1. สำรองข้อมูลทั้งหมดของคุณ คุณกำลังยุ่งกับระบบไฟล์ของคุณดังนั้นการสำรองข้อมูลจึงเป็นความคิดที่ดี
  2. ตรวจสอบให้แน่ใจว่าคุณมีเคอร์เนลและ cryptsetup version ที่ต้องการ (3.1 & 1.4, เช่นใน Ubuntu 12.04, ระวังแม้ว่าในขณะที่เขียน 12.04 ยังเป็นรุ่นเบต้า)
  3. เพิ่มพารามิเตอร์ทิ้งลงในตัวเลือกระบบไฟล์ของปริมาณ LVM ที่เข้ารหัสในไฟล์ / etc / fstab ของคุณ สิ่งนี้ทำให้ระบบไฟล์ของพาร์ติชัน LVM ของคุณทราบว่าคุณต้องการใช้ TRIM

    /dev/mapper/volumegroup-root    /   ext4 discard,noatime,nodiratime,errors=remount-ro    0    1
    
  4. ขั้นตอนสุดท้ายนั้นยังไม่เพียงพอ ตราบใดที่ LUKS ไม่ทราบว่าคุณต้องการใช้ TRIM มันจะบล็อกการดำเนินการ TRIM ทั้งหมดที่มาจากระบบไฟล์ของพาร์ติชัน LVM อย่างมีประสิทธิภาพด้วยเหตุผลด้านความปลอดภัย เพิ่มพารามิเตอร์ทิ้งให้กับตัวเลือก cryptdevice ใน / etc / crypttab เพื่อให้ LUKS ยอมรับพฤติกรรมการทิ้งของพาร์ติชัน LVM

    sda5_crypt UUID=e364d03f-[...]6cd7e none luks,discard
    
  5. สร้าง initramfs ของคุณใหม่ ตัวเลือก crypttab จะถูกเก็บไว้ที่นั่นและใช้ในการบูต

    sudo update-initramfs -c -k all
    
  6. Reboot

  7. ตรวจสอบว่า TRIM ทำงานอยู่หรือไม่

    sudo dmsetup table /dev/mapper/sda5_crypt --showkeys
    
  8. หากคำสั่งสุดท้ายแสดงผลลัพธ์เช่นนี้ (1 allow_discards ในตอนท้าย) คุณก็พร้อมแล้ว

    0  77656056  crypt  aes-cbc-essiv:sha256  abc[...]c7a0c  0  8:5  2056  1  allow_discards
    

ผลลัพธ์

TRIM ถูกเปิดใช้งาน เพลิดเพลินกับ SSD ที่ไม่ยุ่งยากของคุณ!


@Marco Ceppi มีเหตุผลเฉพาะสำหรับการแก้ไขสิ่งที่ฉันมองข้าม?
nem75

เพียงแค่จัดเก็บค่า markdown และลบบรรทัด "ลายเซ็น" (สันนิษฐานว่าคุณจะได้รับข้อเสนอแนะผ่านความคิดเห็นและการลงคะแนนบนเว็บไซต์
Marco Ceppi

7
ควรมีคำแนะนำที่นี่ในกรณีที่ไซต์ / หน้าไม่พร้อมใช้งาน
Cas

นอกจากนี้นี่เป็นคำตอบสำหรับลิงค์เท่านั้นอย่างมีประสิทธิภาพ แต่ก็ไม่ได้ผลเลย ส่วนใหญ่คุณจะใช้ LVM กับ LUKS ซึ่งไม่สามารถเผยแพร่ TRIM ใน 12.04 ดูคำตอบนี้สำหรับข้อมูลเพิ่มเติม
gertvdijk

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