รองรับคำสั่ง TRIM ของ VirtualBox และ SSD


27

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

แหล่งที่มา:
https://forums.virtualbox.org/viewtopic.php?f=7&t=51768
http://jaysonrowe.blogspot.com/2013/08/compacting-virtualbox-vdi.html

คำสั่งที่แน่นอนของฉันแนบไฟล์ดิสก์:

VBox จัดการพื้นที่เก็บข้อมูล "GuestOsMachineName" - สตอเรคทอป "SATA" - พอร์ต 1 - อุปกรณ์ 0 - เปิดใช้งานบน - ทิ้งบน - พื้นที่ "C: \ path \ to \ file.vdi" - ชนิด hdd

ซึ่งสร้างรายการนี้ในไฟล์ * .vbox ของเครื่อง:

<AttachedDevice nonrotational="true" discard="true" type="HardDisk" port="1" device="0">
    <Image uuid="{3836a042-a83e-4000-9a59-e95ad65162ce}"/>
</AttachedDevice>

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

  • ไฟล์ดิสก์ที่แนบมาโดยไม่มีตัวเลือก --nonrotational และ - ทิ้งขนาดไว้ (ไดนามิก) แม้หลังจากลบไฟล์ใน guest OS
  • ไฟล์ดิสก์ที่แนบมาพร้อมกับตัวเลือกทั้งสองที่กล่าวถึงข้างต้นจะเป็นการปล่อยพื้นที่หลังจากที่ข้อมูลถูกลบ

ตอนนี้ที่นี่คำถามของฉันคือ
- ตัวเลือกอะไรทิ้ง - ทำอะไรกันแน่? มันไม่ได้อธิบายไว้ในคู่มือ VirtualBox ( http://www.virtualbox.org/manual/ch08.html#vboxmanage-storageattach )
- มันผ่าน TRIM ลงไปยังโฮสต์ OS จริงหรือไม่?


3
TRIM เสมือนที่ใช้กับเครื่องเสมือนที่เชื่อมต่อกับดิสก์เสมือนสำหรับระบบเสมือน ...
Fiasco Labs

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

11
เพื่อตอบ @Ramhound บล็อกของฉันเป็นหนึ่งในโพสต์ของ OP ฉันไม่แน่ใจว่าเหตุผลของเขาคืออะไร แต่สำหรับฉันฉันมีเครื่องเสมือนที่ฉันจำเป็นต้องลดขนาดไฟล์ของดิสก์ที่จัดสรรแบบไดนามิก มันเป็นดิสก์ที่เก็บข้อมูลที่ถูกลบไปและฉันพยายามลดขนาดให้เล็กลง - ผ่านคำสั่ง TRIM เพื่อให้สามารถใช้งานได้ ... การลดขนาดดิสก์เสมือนจาก 12G เป็น 7G ไปที่ OP ฉันหวังว่าโพสต์ของฉันจะช่วยคุณ ฉันมาที่นี่โดยดูการรับส่งข้อมูลในบล็อกของฉัน
Jayson Rowe

เป็นเพียงคำเตือนสำหรับทุกคนที่สนใจในหัวข้อ การปรับใช้การตัดแต่งบนเครื่องจำลองอิมเมจดิสก์ VirtualBox นั้นมีค่ามากและอาจทำให้ vm ของคุณเสียได้ มีบั๊กอายุ 2 ปีที่เปิดให้มัน เป็นไปได้ที่จะเปิดใช้งาน แต่ไม่ต้องเสียเวลาลอง
Dominik SMogor

ฉันคิดว่านี่เป็นข้อผิดพลาดที่ Dominik อ้างถึง: virtualbox.org/ticket/16450
bobpaul

คำตอบ:


19

--discardตัวเลือกระบุว่าvdiรูปภาพจะหดตามtrimคำสั่งจากระบบปฏิบัติการเกสต์ ต้องปฏิบัติตามข้อกำหนดต่อไปนี้:

  • รูปแบบดิสก์ต้องเป็น VDI
  • พื้นที่ที่ล้างจะต้องมีอย่างน้อย 1MB (ขนาด)
  • [อาจ] พื้นที่ที่ถูกล้างจะต้องครอบคลุมพื้นที่อย่างน้อย 1MB (การจัดตำแหน่ง)

แน่นอนว่าแขกระบบปฏิบัติการจะต้องได้รับการกำหนดค่าให้ออกtrimคำสั่งโดยทั่วไปนั่นหมายถึงระบบปฏิบัติการแขกจะคิดว่าดิสก์นั้นเป็น SSD Ext4 รองรับการ-o discardเมานท์แฟล็ก; OSX อาจต้องการการตั้งค่าเพิ่มเติมตามค่าเริ่มต้นเฉพาะSSD ของ Apple ที่ให้ไว้เท่านั้นที่ออกคำสั่งนี้ Windows ควรตรวจจับและสนับสนุน SSD อย่างน้อยในเวอร์ชัน 7 และ 8 โดยอัตโนมัติฉันไม่ชัดเจนว่าการตรวจจับเกิดขึ้นเมื่อติดตั้งหรือรันไทม์ ลินุกซ์ exFAT ไดรเวอร์ (มารยาทของซัมซุง) สนับสนุนคำสั่งทิ้ง ยังไม่ชัดเจนว่าการใช้ exFAT ของ Microsoft รองรับเหมือนกันแม้ว่าระบบไฟล์จะได้รับการออกแบบให้เริ่มต้นด้วยแฟลช

นอกจากนี้ยังมีวิธีการเฉพาะกิจในการออกคำสั่งtrimเช่น Linux fstrimส่วนหนึ่งของutil-linuxแพ็คเกจ

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


1
นอกจากนี้การใช้การทำซ้ำบางอย่างใน btrfs (โดยเฉพาะที่เจาะรูสำหรับ 0 ภูมิภาค) และbtrfs balanceช่วยในการสร้างขอบเขตที่สามารถตัดได้มากที่สุด
Omnifarious

12

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

ขั้นแรกให้ตั้งค่าโฮสต์เพื่อให้มีเนื้อที่ว่างเป็น TRIM'ed คุณสามารถเมานต์ระบบไฟล์ด้วย -o ละทิ้งหรือคุณสามารถรัน fstrim บนระบบไฟล์เป็นประจำผ่าน cron ฉันชอบตัวหลังเพราะตัวเลือกแรกอาจทำให้ระบบล็อคเมื่อลบไฟล์จำนวนมากในคราวเดียว

รูปแบบดิสก์ที่ใช้ต้องเป็นขนาดไดนามิก VDI ตามที่เขียนไว้ qarma

ตรวจสอบให้แน่ใจว่า nonrotational = "true" discard = "true" ถูกตั้งค่าในไฟล์. vbox ตามที่อธิบายไว้ภายใต้ OP

จากนั้นเปิดใช้งาน TRIM ใน guest OS ตามปกติ ใน Linux ฉันขอแนะนำ cron job ที่รัน fstrim อีกครั้ง สิ่งนี้อาจมีความสำคัญมากกว่านี้เนื่องจากค่าใช้จ่ายในการทำ TRIM บนอิมเมจดิสก์เสมือนนั้นสูงกว่าบนฟิสิคัล SSD มากเนื่องจากข้อมูลถูกย้ายไปรอบ ๆ เพื่อทำให้ภาพเล็กลง

ขณะนี้เนื่องจากดิสก์อิมเมจถูกบีบอัดอย่างสม่ำเสมอจึงจะใช้พื้นที่จริงเท่านั้นรวมทั้งค่าใช้จ่ายขนาดบล็อก 1MB บางส่วนตามที่ qarma เขียน นี่หมายความว่าพื้นที่ว่างจะถูกตัดบนโฮสต์ SSD อีกครั้ง


จริง ๆ แล้วฉันฆ่า VMs ของฉันโดยใช้คำสั่ง trim
davidbaumann

@davidbaumann มันเกิดขึ้นได้อย่างไร?
dvtan

จริง ๆ แล้วหลังจากเปิดใช้งานมันเริ่มตัดประมาณ 20GB ในขณะนี้แล็ปท็อปชน (มีปัญหากับ GPU ของฉันในวันนี้) ฟอรัม.virtualbox.org/viewtopic.php?f=2&t=75308
davidbaumann

คำสั่งให้ทำเช่นนี้กับดิสก์ตัวแรกที่มีอยู่ (สมมติว่า SATA):VBoxManage storageattach $VM --storagectl "SATA Controller" --port 0 --device 0 --nonrotational on --discard on
RobM
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.