บังคับให้ zpool ใช้ / dev / disk / by-id ใน Ubuntu Xenial


16

ฉันกำลังใช้ OpenZFS ที่ให้มาด้วยบน Ubuntu 16.04 Xenial ลอง

เมื่อสร้างพูลฉันมักจะอ้างอิงไดรฟ์โดย serials ของพวกเขาใน/dev/disk/by-id/(หรือ/dev/disk/gptบน FreeBSD) เพื่อความยืดหยุ่น ไดรฟ์ไม่ได้อยู่ในลำดับเดียวกันเสมอ/devเมื่อรีบูทเครื่องและหากคุณมีไดรฟ์อื่นในเครื่องพูอาจล้มเหลวในการติดตั้งอย่างถูกต้อง

ตัวอย่างเช่นทำงานzpool statusในกล่อง 14.04 ฉันได้รับนี้

NAME                                  STATE     READ WRITE CKSUM
tank                                  ONLINE       0     0     0
  raidz1-0                            ONLINE       0     0     0
    ata-Hitachi_HDS722020ALA330_[..]  ONLINE       0     0     0
    ata-Hitachi_HDS722020ALA330_[..]  ONLINE       0     0     0
    ata-Hitachi_HDS722020ALA330_[..]  ONLINE       0     0     0
    ata-Hitachi_HUA722020ALA330_[..]  ONLINE       0     0     0

แต่เมื่อฉันสร้างกลุ่มใหม่ใน 16.04 ด้วยสิ่งนี้ (ตัวย่อ):

zpool create pool raidz \
    /dev/disk/by-id/ata-Hitachi_HDS723030ALA640_[..] \
    /dev/disk/by-id/ata-Hitachi_HDS723030ALA640_[..] \
    /dev/disk/by-id/ata-Hitachi_HDS723030ALA640_[..] \
    /dev/disk/by-id/ata-Hitachi_HDS723030ALA640_[..]

ฉันได้รับสิ่งนี้ด้วยzpool status:

NAME        STATE     READ WRITE CKSUM
tank        ONLINE       0     0     0
  raidz1-0  ONLINE       0     0     0
    sdf     ONLINE       0     0     0
    sde     ONLINE       0     0     0
    sdd     ONLINE       0     0     0
    sda     ONLINE       0     0     0

ดูเหมือนว่า zpool จะติดตาม symlink มากกว่าที่จะอ้างอิงมัน

มีวิธีบังคับให้ zpool ที่ 16.04 เคารพการอ้างอิงไดรฟ์ของฉันเมื่อสร้างพูลหรือไม่? หรือมิฉะนั้นความกังวลของฉันเกี่ยวกับสิ่งที่มันทำที่นี่ถูกใส่ผิดที่?

อัปเดต: วิธีแก้ปัญหา

ฉันพบกระทู้สำหรับ zfsonlinux บน Github ที่แนะนำวิธีแก้ปัญหา สร้าง zpool ของคุณด้วย/dev/sdXอุปกรณ์ก่อนจากนั้นทำสิ่งนี้:

$ sudo zpool export tank
$ sudo zpool import -d /dev/disk/by-id -aN

ฉันยังคงต้องการที่จะสามารถทำสิ่งนี้กับเริ่มต้นzpool createแม้ว่าถ้าเป็นไปได้


ไม่สำคัญว่าคุณจะสร้างมันอย่างไร หากเปลี่ยนเป็น / dev / sd? ชื่ออุปกรณ์zfs exportและzfs import -dจะทำงานอยู่ดี BTW ยกเว้นว่าคุณต้องการพื้นที่ทุกไบต์จริงๆให้ใช้คู่มิเรอร์สองคู่แทนการโจมตี ประสิทธิภาพของ Raidz นั้นดีกว่า raid-5 แต่ก็ยังแย่กว่า Raid-10 หรือ zfs mirrored นอกจากนี้ยังง่ายต่อการขยายกลุ่มที่ประกอบด้วยคู่ที่มิเรอร์เพิ่มดิสก์สองครั้งต่อครั้ง ... ด้วย raidz คุณต้องแทนที่ไดรฟ์แต่ละตัวด้วยไดรฟ์ที่มีขนาดใหญ่กว่าและเมื่อคุณเปลี่ยนดิสก์ทั้งหมดจะเป็นของคุณ สระว่ายน้ำมีพื้นที่ว่างมากขึ้น
cas.

ฉันยังคงมีสระว่ายน้ำจู่โจม -z และเสียใจที่ทำให้พวกเขา เมื่อฉันสามารถซื้อดิสก์ทดแทนได้ฉันจะสร้างกลุ่มใหม่ด้วยคู่ที่ทำมิเรอร์และใช้zfs sendเพื่อคัดลอกข้อมูลของฉันไปยังกลุ่มใหม่ ที่จริงแล้ว raid-z ก็โอเคสำหรับกล่อง mythtv ของฉันที่ประสิทธิภาพไม่สำคัญเว้นแต่ว่าฉันกำลังใช้งาน transcode 6 หรือ 8 ครั้งในคราวเดียว การเปลี่ยนเป็นคู่ที่ทำมิเรอร์จะเห็นได้ชัดเจนมากในกลุ่มที่/home ไดเรกทอรีของฉันอาศัยอยู่
cas.

2
การสะท้อนของ ZIL นั้นทำให้คุณสามารถใช้ประโยชน์จาก SSD ราคาถูกธรรมดาได้มากกว่าการใช้ตัวเก็บประจุขนาดใหญ่เพื่อป้องกันการสูญเสียพลังงาน IMO การทำมิเรอร์ของ ZIL นั้นไม่ใช่ทางเลือกไม่ว่าคุณจะมี SSD ประเภทไหน - ถ้า ZIL ของคุณตายคุณจะสูญเสียข้อมูลที่ยังไม่ได้เขียนทั้งหมดและอาจทำให้พูลของคุณเสียหาย สำหรับ L2ARC ฉันบอกว่าห้ามมิร์เรอร์พวกเขาโดยเฉพาะ... การทำมิเรอร์แคช L2ARC นั้นเป็นการเสียเวลาเงินและพื้นที่ SSD ที่ดี (และจะไม่ทำอะไรเลยเพื่อป้องกันการสูญเสียแคช
cas.

1
:) BTW สมองของฉันทำงานไม่ถูกต้องเมื่อฉันอธิบายเหตุผลของการทำมิเรอร์ ZIL มันไม่ใช่การป้องกันการสูญเสียพลังงานนั่นเป็นเรื่องไร้สาระที่สมบูรณ์และฉันไม่ควรพูด มันเพื่อป้องกันความล้มเหลวของไดรฟ์ ZIL ie raid-1 mirror สำหรับ ZIL โดยทั่วไปแล้ว SSD ที่มีราคาสมเหตุสมผลนั้นดีกว่าหนึ่งแพงมาก (เว้นแต่ว่า SSD ที่มีราคาแพงกว่านั้นมีอินเตอร์เฟสที่เร็วกว่าเช่น PCI-e vs SATA) และยูพีเอสเป็นสิ่งจำเป็น ...
cas

1
@cas mirrored ZIL ป้องกันความล้มเหลวของอุปกรณ์ SLOG ในเวลาเดียวกันกับการปิดระบบที่ไม่คาดคิด ภายใต้การดำเนินงานปกติ ZIL เป็นแบบเขียนอย่างเดียวและเขียนไปยังหน่วยเก็บข้อมูลถาวรมาจาก RAM (ARC) หากระบบปิดตัวลงโดยไม่คาดคิดระบบจะใช้งานบันทึกการใช้งานเจตนา (ZIL, SLOG) เพื่อสิ้นสุดการเขียนที่ถูกขัดจังหวะ เฉพาะในกรณีที่การปิดระบบที่ไม่คาดคิดเกิดขึ้นพร้อมกับความล้มเหลวของอุปกรณ์ SLOG คุณต้องมี SLOG แบบ redudant เพื่อกู้คืนการเขียนที่ถูกขัดจังหวะ สำหรับเวิร์กโหลดที่ไม่ใช่เซิร์ฟเวอร์ (และเซิร์ฟเวอร์จำนวนมาก) ส่วนใหญ่ SLOG นั้น overkill เนื่องจาก ZIL เข้าสู่การเล่นด้วยการเขียนแบบซิงโครนัสเท่านั้น
CVn

คำตอบ:


1

นาน ๆ ครั้งzpool import -d /dev/disk/by-idไม่ทำงาน

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

zpool import -d /dev/disk/by-id POOL
zpool export POOL
zpool import POOL

ครั้งที่สองแม้ไม่มี-dสวิตช์นำเข้าตาม ID อุปกรณ์แม้ว่าจะไม่ได้เป็นครั้งแรกด้วยคำสั่งที่ชัดเจน

อาจเป็นไปได้ว่านี่เป็นเพียงข้อผิดพลาด ZFS ในช่วงไม่กี่สัปดาห์หรือหนึ่งเดือน (หนึ่งหรือสองปีที่แล้ว) และสิ่งนี้ไม่จำเป็นอีกต่อไป ฉันคิดว่าฉันควรจะยื่นรายงานข้อผิดพลาด แต่มันก็ไม่สำคัญที่จะแก้ไข


1

ฉันรู้ว่ากระทู้นี้เรียงจากเก่า แต่มีคำตอบ คุณต้องอัปเดตไฟล์แคชหลังจากนำเข้า ตัวอย่างนี้แสดงตำแหน่งเริ่มต้นสำหรับไฟล์แคช

$> sudo zpool export POOL
$> sudo zpool import -d /dev/disk/by-id POOL
$> sudo zpool import -c /etc/zfs/zpool.cache
$> sudo zpool status POOL
NAME                                  STATE     READ WRITE CKSUM
POOL                                  ONLINE       0     0     0
  raidz1-0                            ONLINE       0     0     0
    ata-Hitachi_HDS722020ALA330_[..]  ONLINE       0     0     0
    ata-Hitachi_HDS722020ALA330_[..]  ONLINE       0     0     0
    ata-Hitachi_HDS722020ALA330_[..]  ONLINE       0     0     0
    ata-Hitachi_HUA722020ALA330_[..]  ONLINE       0     0     0
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.