พา ธ ไปยังอุปกรณ์ USB จะเปลี่ยนตามรันไทม์


1

ฉันกำลังวิ่ง ราสเบอร์รี่ Pi กับ Raspbian (Linux บนพื้นฐานของ Debian Wheezy) เป็น NAS (Network Attached Storage) ที่มีฮาร์ดไดรฟ์ USB ต่ออยู่ อุปกรณ์ USB เท่านั้น .

ปัญหาที่ฉันเผชิญอยู่ก็คือฮาร์ดไดรฟ์ USB ภายนอกอยู่ที่ /dev/sda แต่ การเปลี่ยนแปลงที่รันไทม์ของระบบปฏิบัติการตามธรรมชาติ ไปยัง /dev/sdb โดยไม่มีเหตุผลใด ๆ จากนั้นในขณะที่ใช้มันที่ /dev/sdb มันกระโดดกลับไป /dev/sda. นอกจากนี้ยังเกิดขึ้นในขณะที่คัดลอกข้อมูลจำนวนมากทำให้เกิดข้อผิดพลาด I / O บางครั้งอาจใช้เวลาหลายชั่วโมง แต่ไม่เช่นนั้นจะใช้เวลาไม่กี่นาที - นี่มันน่ากลัวจริงๆ!

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

คำสั่ง 1: udevadm info -q all -p $(udevadm info -q path -n /dev/sda)

เอาท์พุท 1:

P: /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0/host0/target0:0:0/0:0:0:0/block/sda
N: sda
S: disk/by-id/usb-WDC_WD25_00JS-40NGB2_8DC88D250088-0:0
S: disk/by-path/platform-bcm2708_usb-usb-0:1.3:1.0-scsi-0:0:0:0
E: DEVLINKS=/dev/disk/by-id/usb-WDC_WD25_00JS-40NGB2_8DC88D250088-0:0 /dev/disk/by-path/platform-bcm2708_usb-usb-0:1.3:1.0-scsi-0:0:0:0
E: DEVNAME=/dev/sda
E: DEVPATH=/devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0/host0/target0:0:0/0:0:0:0/block/sda
E: DEVTYPE=disk
E: ID_BUS=usb
E: ID_INSTANCE=0:0
E: ID_MODEL=00JS-40NGB2
E: ID_MODEL_ENC=00JS-40NGB2\x20\x20\x20\x20\x20
E: ID_MODEL_ID=2336
E: ID_PART_TABLE_TYPE=dos
E: ID_PATH=platform-bcm2708_usb-usb-0:1.3:1.0-scsi-0:0:0:0
E: ID_PATH_TAG=platform-bcm2708_usb-usb-0_1_3_1_0-scsi-0_0_0_0
E: ID_REVISION=0100
E: ID_SERIAL=WDC_WD25_00JS-40NGB2_8DC88D250088-0:0
E: ID_SERIAL_SHORT=8DC88D250088
E: ID_TYPE=disk
E: ID_USB_DRIVER=usb-storage
E: ID_USB_INTERFACES=:080650:
E: ID_USB_INTERFACE_NUM=00
E: ID_VENDOR=WDC_WD25
E: ID_VENDOR_ENC=WDC\x20WD25
E: ID_VENDOR_ID=152d
E: MAJOR=8
E: MINOR=0
E: SUBSYSTEM=block
E: UDEV_LOG=3
E: UDISKS_ATA_SMART_IS_AVAILABLE=1
E: UDISKS_PARTITION_TABLE=1
E: UDISKS_PARTITION_TABLE_COUNT=1
E: UDISKS_PARTITION_TABLE_SCHEME=mbr
E: UDISKS_PRESENTATION_NOPOLICY=0
E: USEC_INITIALIZED=7853442

คำสั่ง 2: udevadm info -q all -p $(udevadm info -q path -n /dev/sdb)

เอาท์พุท 2:

P: /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0/host2/target2:0:0/2:0:0:0/block/sdb
N: sdb
S: disk/by-id/usb-WDC_WD25_00JS-40NGB2_8DC88D250088-0:0
S: disk/by-path/platform-bcm2708_usb-usb-0:1.3:1.0-scsi-0:0:0:0
E: DEVLINKS=/dev/disk/by-id/usb-WDC_WD25_00JS-40NGB2_8DC88D250088-0:0 /dev/disk/by-path/platform-bcm2708_usb-usb-0:1.3:1.0-scsi-0:0:0:0
E: DEVNAME=/dev/sdb
E: DEVPATH=/devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0/host2/target2:0:0/2:0:0:0/block/sdb
E: DEVTYPE=disk
E: ID_BUS=usb
E: ID_INSTANCE=0:0
E: ID_MODEL=00JS-40NGB2
E: ID_MODEL_ENC=00JS-40NGB2\x20\x20\x20\x20\x20
E: ID_MODEL_ID=2336
E: ID_PART_TABLE_TYPE=dos
E: ID_PATH=platform-bcm2708_usb-usb-0:1.3:1.0-scsi-0:0:0:0
E: ID_PATH_TAG=platform-bcm2708_usb-usb-0_1_3_1_0-scsi-0_0_0_0
E: ID_REVISION=0100
E: ID_SERIAL=WDC_WD25_00JS-40NGB2_8DC88D250088-0:0
E: ID_SERIAL_SHORT=8DC88D250088
E: ID_TYPE=disk
E: ID_USB_DRIVER=usb-storage
E: ID_USB_INTERFACES=:080650:
E: ID_USB_INTERFACE_NUM=00
E: ID_VENDOR=WDC_WD25
E: ID_VENDOR_ENC=WDC\x20WD25
E: ID_VENDOR_ID=152d
E: MAJOR=8
E: MINOR=16
E: SUBSYSTEM=block
E: UDEV_LOG=3
E: UDISKS_ATA_SMART_IS_AVAILABLE=1
E: UDISKS_PARTITION_TABLE=1
E: UDISKS_PARTITION_TABLE_COUNT=1
E: UDISKS_PARTITION_TABLE_SCHEME=mbr
E: UDISKS_PRESENTATION_NOPOLICY=0
E: USEC_INITIALIZED=2425648913

ดังนั้นฉันจึงลองใช้เคล็ดลับและเพิ่มบรรทัด BUS=="usb", ATTR{serial}=="WDC_WD25_00JS-40NGB2_8DC88D250088-0:0", NAME="sda" ไปที่ไฟล์ /etc/udev/rules.d/10-usb-serial แต่น่าเสียดายที่นี่ยังไม่ได้แก้ปัญหา

ฉันไม่ทราบว่านี่เป็นสิ่งสำคัญที่ต้องพูดถึง แต่ที่เก็บข้อมูลภายนอก USB ที่ใช้ประกอบด้วยฮาร์ดไดรฟ์สองตัวขนาด 256 GB ใน JBOD กรณีควบคุม นั่นหมายความว่าดูเหมือนว่าฮาร์ดไดรฟ์หนึ่งตัวขนาด 512 GB สำหรับระบบปฏิบัติการ

และตอนนี้ฉันรอคอยที่จะได้รับความช่วยเหลือและ / หรือข้อเสนอแนะ - ขอบคุณล่วงหน้า!


นี่คือ มาก แปลก. ระบบปฏิบัติการของคุณติดตั้งอยู่ที่ไหน สองเอาต์พุตที่คุณแสดงรายการอุปกรณ์ต่างกันคือคุณ แน่ใจ /dev ชื่อดิสก์ของคุณมีการเปลี่ยนแปลง?
terdon

ติดตั้งระบบปฏิบัติการบนการ์ด SD ขนาด 4 GB และ Raspberry Pi กำลังบูตจากการ์ด SD แต่คุณจะเห็นอุปกรณ์ต่าง ๆ ในเอาท์พุทของฉันได้อย่างไร ใช่ฉันแน่ใจว่ามันเป็นอุปกรณ์ตัวเดียวและต่อพ่วงกับ USB
MrksKwsnck

DEVPATH และ P: เส้นแตกต่างกัน
terdon

ใช่นั่นเป็นเรื่องจริง แต่มันเป็นอุปกรณ์ USB เดียวกัน ฉันไม่ได้สัมผัสอะไรเลยสำหรับผลลัพธ์ทั้งสองนี้
MrksKwsnck

ฉันรู้ว่ามันมี 2 แผ่น แต่ดูเหมือนว่าจะเป็นปัญหา
terdon

คำตอบ:


0

เมื่อพิจารณาว่าเป็นไดรฟ์ USB ที่เชื่อมต่อจะสลับระหว่างกัน /dev/sda และ /dev/sdb ในการบูตไม่น่าแปลกใจ ในระหว่างรอบการประชุมปกติจะนำไปสู่การสงสัยว่ามีการกำหนดค่า usb ของสกรูที่ด้าน RasPi หรือฟิสิคัล HDD จริง (เพิ่มเติมเฟิร์มแวร์ที่ควบคุม HDD 2 ตัวในกรง) ที่กล่าวว่าให้ตรวจสอบลิงค์นี้ UUID ของ สิ่งนี้เกี่ยวข้องกับพาร์ติชัน Linux EXT3 และตัดสินจากผลลัพธ์ที่คุณมี dos พาร์ติชั่น (ซึ่งมีแนวโน้มว่าจะเป็น FAT32 พาร์ติชั่น) แต่คุณควรจะดึง UUID จาก USB HDD โดยใช้ blkid คำสั่งดังกล่าวใน บทความ . ต่อไปนี้คือ บาง ลิงก์หากคุณมีปัญหาในการรับ UUID ของพาร์ติชัน DOS ของคุณ

IMHO หากคุณกำลังใช้ RasPi ในฐานะ NAS และไดรฟ์ USB จะไม่ถูกย้าย (เช่นไดรฟ์ USB ยังคงเสียบเข้ากับ RasPi 24/7) ฉันขอแนะนำให้ดึง HDD ออกจากกล่อง USB และโดยตรง เชื่อมต่อพวกเขากับ RasPi (ถ้าคุณทำได้) สิ่งนี้จะหลีกเลี่ยงปัญหา I / O เหล่านั้นและให้ปริมาณงานที่สูงขึ้นกับดิสก์ของคุณ (ความเร็ว SATA เทียบกับความเร็ว USB2)

หวังว่าจะช่วยออก


0

เนื่องจากฉันไม่มีแนวคิดเพิ่มเติมในการแก้ปัญหานี้ฉันเพียงแค่ใช้สาย USB อื่นเพื่อเชื่อมต่อฮาร์ดไดรฟ์ภายนอกกับ Raspberry Pi และตอนนี้มันทำงานได้อย่างถูกต้อง O_o ดูเหมือนว่าสายเคเบิล USB ที่ใช้มาก่อนหน้านี้มีข้อบกพร่อง

เห็นได้ชัดว่าฮาร์ดไดรฟ์ภายนอกก่อนหน้านี้สูญเสียการเชื่อมต่อกับ Raspberry Pi เป็นเวลาสั้น ๆ ระบบปฏิบัติการกำลังคิดว่ามีการเชื่อมต่อฮาร์ดไดรฟ์อื่น ไม่อย่างนั้นฉันก็นึกภาพไม่ออก

ดังนั้นปัญหานี้ได้รับการแก้ไขอย่างเป็นทางการแล้ว!

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