TRIM / UNMAP Zvol ผ่าน iSCSI

Aug 26 2020

ฉันกำลังตั้งค่า SAN สำหรับการบูตแบบไม่ใช้ดิสก์ แบ็กเอนด์ของฉันประกอบด้วย ZFS-Vol ที่แชร์ผ่าน iSCSI จนถึงตอนนี้ทุกอย่างทำงานได้ดียกเว้น TRIM / UNMAP สำหรับการทดสอบ puposes ฉันตั้งค่า VM สองเครื่องที่ใช้ Ubuntu20.04 ใน VirtualBox เครือข่ายร่วมกันผ่านเครือข่ายภายในที่มีที่อยู่ IPv4 แบบคงที่ บนเป้าหมาย (tgt) มีไดรฟ์เสมือนที่สองที่ฟอร์แมตด้วย ZFS ใน zpool นี้ฉันสร้าง zVol และฟอร์แมตด้วย GPT และ ext4

/etc/tgt/conf.d/iscsi.conf
<target example.com:lun1>
    <backing-store /dev/zvol/tank/iscsi_share>
        params thin_provisioning=1
    </backing-store>
    initiator-address 192.168.0.2
</target>

ในตัวเริ่มต้น (open-iscsi) ฉันใช้คำสั่งนี้เพื่อกระตุ้นการดำเนินการ TRIM:

sudo mount /dev/sdb1 /iscsi-share
sudo dd if=/dev/zero of=/iscsi-share/zero bs=1M count=512
sudo rm /iscsi-share/zero
sudo fstrim /iscsi-share

แต่เชลล์ตอบสนองด้วย "fstrim: / iscsi-share: ไม่รองรับตัวเลือกทิ้ง" หากฉันออกคำสั่งเหล่านั้นบนเครื่องเป้าหมายคุณสมบัติ "REFER" ของ zVol จะลดลงตามที่คาดไว้

เนื่องจากฉันไม่พบอะไรเลยในขณะที่ค้นหาเว็บฉันไม่พบคำใบ้ว่าเหตุใดจึงใช้งานไม่ได้หรือเป็นไปได้เลย


แก้ไข: ขณะที่ผมมีคำแนะนำในการใช้ตัวเลือกthin_provisioning

หลังจากที่ฉันแบ่งพาร์ติชันไดรฟ์ใหม่และติดตั้งบนตัวเริ่มต้นฉันได้รับข้อความแสดงข้อผิดพลาดblk_update_request: critical target error, dev sdb, sector 23784 op 0x9:(WRITE_ZEROES) flags 0x800 phys_seg 0 prio class 0สำหรับหลายส่วนและหลังจากสร้างและลบไฟล์ทดสอบแล้วให้fstrimส่งข้อความ

blk_update_request: I/O error, dev sdb, sector 68968 op 0x3:(DISCARD) flags 0x800 phys_seg 1 prio class 0
fstrim: iscsi-share: FITRIM ioctl failed: Input/output error

แก้ไข: เนื่องจากมีคำตอบที่อ้างถึงLIOตอนนี้ฉันจึงลองใช้ targetcli ด้วย ที่นั่นฉันตั้งค่าเป้าหมายด้วย zVol ของฉันภายใต้ / backstores / block / iscsi และset attribute emultate_tpu=1. หลังจากนำเข้าสิ่งนี้ไปยังตัวเริ่มต้นของฉันฉันแบ่งพาร์ติชันใหม่จัดรูปแบบและติดตั้งบนตัวเริ่มต้น จากนั้นฉันสร้างไฟล์ทดสอบของฉันลบออกและออกfstrimคำสั่งและใช้งานได้ ขอบคุณสำหรับความช่วยเหลือ

คำตอบ

2 MichaelHampton Aug 26 2020 at 22:20

LIO ปิดใช้งาน UNMAP ตามค่าเริ่มต้น หากคุณต้องการเปิดใช้งานคุณควรตั้งค่าemulate_tpuแอตทริบิวต์ที่เป้าหมาย

6 BaronSamedi1958 Aug 26 2020 at 22:44

สิ่งที่คุณต้องการคือการใช้งานเป้าหมาย iSCSI ที่เฉพาะเจาะจง ส่วนใหญ่ไม่ทำการแมปคำสั่ง 1: 1 SCSI ดังนั้นหากเป้าหมาย iSCSI เลียนแบบฮาร์ดดิสก์ - จะไม่ข้ามคำสั่งที่ไม่รู้จัก (รวมถึง UNMAP แน่นอน) ไปยังสตอเรจที่อยู่เบื้องหลัง @ back-end UNLESS คุณจะถาม iSCSI อย่างชัดเจน เป้าหมายที่จะทำเช่นนั้น ด้วย TGT คุณระบุว่าคุณระบุ "thin_provisioning = 1" สำหรับ LUN เสมือนของคุณในไฟล์ config

5 batistuta09 Aug 28 2020 at 00:41

TRIM ถูกเปิดใช้งานโดยค่าเริ่มต้นเพื่อให้ทำงานทุกสัปดาห์ใน Ubuntu 20.04 ดังนั้นจึงไม่มีปัญหาแม้ว่าคุณจะเรียกใช้ด้วยตนเองก็ตาม คุณสามารถตรวจสอบสิ่งนี้ได้ใน fstrim.service และ fstrim.timer ในกรณี:https://askubuntu.com/questions/1034169/is-trim-enabled-on-my-ubuntu-18-04-installation

อย่างไรก็ตามดูเหมือนว่าคุณต้องเปิดใช้งาน UNMAP บนเป้าหมายตามที่กล่าวไว้แล้ว เนื่องจาก SATA SSD จำนวนมากมีปัญหากับ UNMAP จึงถูกปิดใช้งานใน LIO โดยค่าเริ่มต้น:http://www.linux-iscsi.org/Doc/LIO%20Admin%20Manual.pdf.

แน่นอนว่าสิ่งต่างๆจะง่ายขึ้นมากเมื่อ iSCSI เป้าหมายรองรับ TRIM / UNMAP โดยไม่ต้องแก้ไขเพิ่มเติม นี่คือตัวอย่าง:https://forums.starwindsoftware.com/viewtopic.php?f=5&t=5343