ZFS บน Linux Replicas ไม่เพียงพอ


3

สรุป

หนึ่งใน ZFS ของฉันไม่สามารถนำเข้าได้อีกต่อไปเนื่องจากข้อความต่อไปนี้:

status: One or more devices contains corrupted data.
action: The pool cannot be imported due to damaged devices or data.
...
    data1       UNAVAIL  insufficient replicas

ฉันต้องการที่จะเข้าใจว่า "แบบจำลองไม่เพียงพอ" หมายถึงอะไรและหากมีวิธีการกู้คืนจากวิธีนี้อย่างปลอดภัยก่อนที่ฉันจะดึงการสำรองข้อมูลออกมาและสร้างพูลหน่วยเก็บข้อมูลขึ้นมาใหม่

ฉันต้องการที่จะเข้าใจสิ่งที่ทำให้เกิดสิ่งนี้และสิ่งที่ฉันสามารถทำได้เพื่อป้องกันสถานการณ์นี้ในอนาคต ฉันเข้าใจหิน ZFS แต่ในฐานะมือใหม่ ZFS มันน่ากลัวที่ฉันต้องดึงการสำรองข้อมูลออกมาสำหรับบางสิ่งบางอย่างที่ไม่น่ากลัวเหมือนการดึงไดรฟ์ออกจากกล่อง

พื้นหลัง

ฉันเพิ่งขับเคลื่อนกล่องนี้และดึงดิสก์ SATA sda ออกมา ฉันแน่ใจว่า 99% ว่าฉันปล่อยให้ระบบปิดตัวเองอย่างสมบูรณ์ก่อนที่จะถอดปลั๊กออกจากผนัง แต่เป็นไปได้ที่ฉันอาจจะปิดฮาร์ดไดรฟ์หากการปิดระบบใช้เวลานานเกินไป

เมื่อเสียบไดรฟ์กลับเข้าใหม่ฉันเชื่อว่าฉันเสียบกลับเข้าไปในพอร์ต SATA เดียวกันบนเมนบอร์ด แต่เป็นไปได้ที่ฉันอาจเสียบเข้ากับพอร์ตอื่น

กล่องยังมีดิสก์ PATA sdb รุ่นเก่าที่ติดตั้ง Debian เป็นระบบปฏิบัติการเพียงพาร์ติชัน ext

ในอดีตฉันจะบู๊ตพูลทั้งหมดของฉันจะถูกนำเข้าและติดตั้งไดรฟ์ข้อมูล ครั้งนี้ฉันไม่ได้อะไรเลย

ในวันนี้

เมื่อฉันบูทขึ้นมาฉันอยู่ที่หน้าจอเข้าสู่ระบบ GDM ตามปกติและรู้ว่าฉันไม่สามารถเข้าสู่ระบบได้ ฉันค้นพบในภายหลังว่าฉันไม่มีไดเรกทอรีบ้านของผู้ใช้เนื่องจากมันอยู่ในกลุ่มทั้งหมด

จากบรรทัดคำสั่งฉันค้นพบสิ่งต่อไปนี้:

# zfs list
no datasets available

# zpool list
no pools available

# zpool status
no pools available

ไดรฟ์ของฉันพร้อมใช้งาน; fdisk สร้างเอาต์พุตที่คาดหวังและฉันมีอุปกรณ์ / dev / sdaX และ / dev / sdbX ของฉัน

zpool importให้ผลลัพธ์ที่น่าสนใจ พูลอื่นรายงาน ONLINE แต่หนึ่งในคำถามนั้นรายงานสิ่งนี้:

   pool: ...
     id: ...
  state: UNAVAIL
 status: One or more devices contains corrupted data.
 action: The pool cannot be imported due to damaged devices or data.
    see: http://zfsonlinux.org/msg/ZFS-8000-5E
 config:

        data1       UNAVAIL  insufficient replicas
          sda2      UNAVAIL

ฉันก็สามารถที่จะนำเข้าสระว่ายน้ำอื่น ๆ ที่จุดนี้ใช้แล้วดูทุกอย่างที่ดีกับพวกเขาด้วยzpool import poolnamezfs list

ไม่เช่นนั้นกับอันนี้:

# zpool import data1
cannot import 'data1': one or more devices are already in use

zpool import แสดงผลลัพธ์เดียวกันสำหรับพูลนี้

ฉันคิดถึงการลบ/etc/zfs/zpool.cacheไฟล์ ฉันส่งออกทุกอย่างแล้วตรวจสอบไดเรกทอรี:

# zpool export -a
# ls /etc/zfs

ไม่มี zpool.cache หลังจากส่งออกดังนั้นฉันเพียงแค่เริ่มระบบใหม่ (ฉันไม่รู้ว่าจะเกิดอะไรขึ้นถ้าฉันลบ zpool.cache ในขณะที่นำเข้าพูลดังนั้นฉันจึงไม่ลอง)

ผลลัพธ์เดียวกันหลังจากรีบูต พูลอื่นนั้นใช้ได้และไม่สามารถนำเข้าได้


โดยทั่วไปแล้ว ZFS จะไม่รู้สึกถึงชื่ออุปกรณ์และจะค้นหาอุปกรณ์หากไม่ใช่ตำแหน่งที่ไฟล์แคชบอกว่าเป็น (อุปกรณ์สำรอง ZFS แต่ละเครื่องจะเก็บตัวระบุที่ไม่ซ้ำกัน, IIRC 64 บิตและอุปกรณ์ทั้งหมดในกลุ่มเก็บรายการของอุปกรณ์ของกลุ่มนั้นตาม ID) ที่กล่าวว่าเราสามารถเห็นผลลัพธ์ของzdb /dev/sdaและ / หรือzdb /dev/sda2(สมมติว่าดิสก์ ZFS ที่มีปัญหา จริง ๆ แล้วระบบปฏิบัติการนั้นถูกระบุว่าเป็น / dev / sda หรือไม่ก็ปรับตามความเหมาะสม)?
CVn

คำตอบ:


1

ฉันต้องการที่จะเข้าใจว่า "แบบจำลองไม่เพียงพอ" หมายถึงอะไร

หมายความว่า ZFS พบข้อผิดพลาดในการอ่านหรือเขียนลงในพูลจากนั้นค้นพบว่ามีความซ้ำซ้อนในพูลไม่เพียงพอที่จะแก้ไขปัญหา เนื่องจากดูเหมือนว่าคุณกำหนดค่า ZFS สำหรับพูลเดียวไดรฟ์นี่หมายถึงมันมีปัญหาและตอนนี้ไม่สามารถกู้คืนด้วยตนเองได้

ในกรณีที่ง่ายzpool status -vจะรายงานแต่ละไฟล์ที่ตอนนี้เสียหายอย่างแก้ไขไม่ได้ การกู้คืนจากการสำรองข้อมูลหรือลบออกจะทำให้กลุ่มกลับสู่สถานะไม่เสียหาย นี่เป็นข้อดีอย่างหนึ่งที่คุณได้รับจาก ZFS ซึ่งต่างจากระบบไฟล์แยก, ตัวจัดการโลจิคัลวอลุ่มและระบบย่อย RAID ข้อผิดพลาดที่ระดับดิสก์ที่มีผลต่อไฟล์เดียวสามารถรายงานเป็นข้อผิดพลาดในไฟล์เฉพาะนั้นขณะที่ FS + LVM + RAID lash-ups ข้อผิดพลาดที่ระดับต่ำกว่าไม่สามารถรักษาบริบทความหมายตามที่เผยแพร่สแต็ก

ตามคำถามของคุณ แต่zpool statusจะไม่รายงานปัญหากับไฟล์โดยเฉพาะอย่างยิ่งซึ่งหมายถึงสิ่งพื้นฐานที่ได้ไปผิดกับดิสก์เดียวในสระว่ายน้ำมีปัญหา ณ จุดนี้ฉันจะมองไปที่การวินิจฉัยดิสก์ตัวเอง: smartctl, badblocks, SpinRite ผู้ขายเครื่องมือวินิจฉัย ฯลฯ

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

วิธีการกู้คืนจากนี้อย่างปลอดภัยก่อนที่ฉันจะดึงข้อมูลสำรองออกมา

หาก ZFS สามารถทำได้ก็จะเป็นเช่นนั้น ZFS ไม่ยอมแพ้ง่ายๆ แต่เมื่อเป็นเช่นนั้นหมายความว่าคุณไม่สามารถใช้ข้อมูลในกลุ่มได้อย่างปลอดภัย

ณ จุดนี้ความหวังที่ดีที่สุดของคุณคือปัญหาคือสื่อเก็บข้อมูลพื้นฐานมีข้อผิดพลาดอ่อน ๆ ที่จะอนุญาตให้ SpinRite badblocksหรือคล้ายกันเข้ามาแล้วบังคับให้ดิสก์ดึงสำเนาที่ไม่ดีของเซกเตอร์เสียครั้งสุดท้ายและ คัดลอกไปยังเซกเตอร์สำรอง

ระวังว่า ZFS นั้นเข้มงวดกว่าระบบไฟล์อื่น ๆ ในเรื่องนี้เพราะจะไม่ยอมรับการกู้คืนเซกเตอร์บางส่วน การตรวจสอบข้อมูลที่แข็งแกร่งหมายความว่าเฉพาะการคืนค่าที่สมบูรณ์ของทุกภาคส่วนอาจทำให้ ZFS ยอมรับว่าระบบไฟล์นั้นสะอาดแล้ว

หากคุณเชื่อว่าข้อมูลบางส่วนนั้นดีกว่าไม่มีข้อมูลนั่นหมายความว่า ZFS เป็นปัญหาสำหรับคุณ หากคุณเชื่อว่าข้อมูลที่ไม่ถูกต้องนั้นไม่ถูกต้อง ZFS จะทำสิ่งที่คุณต้องการ

มีการใช้งานอุปกรณ์อย่างน้อยหนึ่งรายการ

นั่นไม่ดีเลย

นั่นหมายความว่าคุณปล่อยให้เคอร์เนลไดรเวอร์อื่น ๆ ติดกับดิสก์นั้นก่อนที่ ZFS จะไปถึงได้หรือ ZFS กำลังค้นหาดิสก์เดียวกันด้วยหลายเส้นทาง

ความหวังที่ดีที่สุดของคุณคือคุณอยู่ในกรณีที่สองและบังคับให้ ZFS ค้นหาดิสก์ด้วยเส้นทางเดียวเท่านั้นที่จะทำให้คุณผ่านปัญหานี้ได้:

$ sudo ZPOOL_IMPORT_PATH="/dev/disk/by-id" zpool import -a

หากใช้งานได้การส่งออกและนำเข้าพูปัญหาอาจทำงานได้อีกครั้งโดยไม่มีการบังคับเนื่องจาก ZFS มักจะจดจำเส้นทางที่ vdev ของตนถูกนำเข้าล่าสุด

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