คีย์ USB จะมีชื่อเหมือนกันทุกครั้งที่ฉันติดตั้งหรือไม่


9

ฉันมีคีย์ USB ซึ่งจะใช้ในการบันทึกข้อมูลทุกวันผ่านสคริปต์ทุบตี ฉันจัดการเพื่อให้มันสำหรับผู้ใช้เฉพาะเพื่อให้สามารถเขียนโฟลเดอร์ในนั้นโดยใช้คำสั่ง:

mount /dev/sdc1 /media/usb -o rw,uid=sysop,gid=sysop

สคริปต์สามารถเรียกใช้และสร้างไดเรกทอรีได้ตามต้องการและสมบูรณ์แบบ ในบางจุดปุ่ม USB จะถูกถอดปลั๊กและแทนที่ด้วยปุ่มใหม่ (รุ่นเดียวกัน) คีย์ USB ใหม่จะยังคงมีชื่ออยู่/dev/sdc1หรือจะเป็นชื่ออื่นหรือไม่

หากเป็นชิ้นส่วนที่แตกต่างกันฉันจะรวมส่วนการติดตั้งในสคริปต์ของฉันเพื่อให้การติดตั้งเป็นไปโดยอัตโนมัติได้อย่างไร


2
คำตอบคือไม่มี แต่คุณสามารถหลีกเลี่ยงได้ว่ามีกฎ udev ดูที่นี่สำหรับคำอธิบายที่ดีขึ้น แต่ล้าสมัยเล็กน้อย
Satō Katsura

@AlexTartan ถ้าคุณเสียบดิสก์ usb อื่น ๆ ในพอร์ต usb อื่น ๆ ก่อนที่มันจะได้รับ sdc ดังนั้นข้อ จำกัด ของคุณ "และไม่มีอะไรอื่นที่เหมาะสมกับ sdc1" นั้นเป็นความจริง โดยทั่วไปนี่เป็นข้อสันนิษฐานที่อันตรายมากซึ่งไม่สามารถทำได้ ไม่ควรใช้ sd [az] เป็นชื่ออุปกรณ์ถาวร นี่เป็นมรดกตกทอดมาตั้งแต่ครั้งที่เรามีคอนโทรลเลอร์ IDE ที่มีพอร์ตคงที่สี่พอร์ตซึ่งสามารถตั้งค่าได้โดยการตั้งค่าจัมเปอร์ฮาร์ดแวร์และเลือกปลั๊กสายเคเบิลที่เหมาะสม
ikrabbe

1
@ikrabbe ฉันรู้ว่านั่นเป็นเหตุผลที่ฉันโพสต์คำตอบตามการระบุฉลาก (สิ่งเหล่านี้สามารถจัดการได้ง่ายขึ้นเล็กน้อย)
Alex Tartan

คำตอบ:


6

ขณะที่การเข้าถึงได้โดยมีความเสี่ยงเป็นประชาชนที่ถูกต้องมากขึ้นอาจทำได้โดย/dev/sdXyUUID

เมื่อคุณพูดถึง (ในบางจุด) การเปลี่ยนแท่ง usb เพื่อรักษาความเข้ากันได้คุณอาจต้องการระบุแท่ง usb ของคุณด้วยฉลาก /dev/disk/by-label/YourLabelHereต้องการทำเช่นนั้นคุณสามารถ:

โปรดทราบว่าคุณต้องตั้งค่าฉลากเป็นแท่ง usb ใหม่ก่อนที่จะเรียกใช้สคริปต์และยัง/dev/disk/by-labelสามารถใช้ได้เฉพาะเมื่อ (อย่างน้อย) แท่ง usb หนึ่งอันเชื่อมต่ออยู่ (ไม่เช่นนั้นจะถูกลบออก)

รายละเอียดเกี่ยวกับวิธีการติดตั้งฉลาก usb สามารถดูได้ที่นี่: /ubuntu/194510/how-to-edit-label-of-usb-drive


1
หากระบบไฟล์ของคุณไม่มีป้ายกำกับ/dev/disk/by-id/อาจใช้แทน (เป็นสิ่งที่ฉันใช้สำหรับระบบไฟล์ของฉัน)
Toby Speight

3

นี่คือวิธีที่ฉันจัดการปัญหานี้ แต่โดยทั่วไปเมื่อ Sato Katsura บอกคุณคุณต้องเขียนกฎ udev

  1. เชื่อมต่ออุปกรณ์ของคุณตรวจสอบว่ามีอุปกรณ์ใดบ้าง (เช่นดู dmesg)
  2. ในฐานะที่เป็น superuser โทรudevadm info --query all /dev/sdc(หรืออะไรก็ตาม)
  3. ตั้งค่ากฎ udev ต่อไปนี้เป็นตัวอย่างสำหรับพกพาของฉัน เขตข้อมูลID_SERIAL_SHORTและID_FS_UUIDฉันอ่านจากข้อมูลในขั้นตอนที่ 2:

    SUBSYSTEM=="block", ENV{ID_SERIAL_SHORT}=="YT440900877400W000Y0", ENV{ID_FS_UUID}=="3878-D432", ENV{DEVTYPE}=="disk", SYMLINK+="pocketbook", OWNER="ingo"
    SUBSYSTEM=="block", ENV{ID_SERIAL_SHORT}=="YT440900877400W000Y0", ENV{ID_FS_UUID}=="9016-4EF8", ENV{DEVTYPE}=="disk", SYMLINK+="pocketbook-sd", OWNER="ingo"
    

    ฉันตั้งค่า OWNER ไว้ที่นี่แล้วซึ่งฉันสามารถเมานท์ได้ด้วยบัญชีผู้ใช้หลักของฉัน นอกจากนี้ในสมุดพกของฉันฉันไม่มีพาร์ติชัน แต่ติดแผ่นดิสก์ธรรมดา หากคุณมีการเปลี่ยนแปลงพาร์ทิชัน:

    ENV{ID_PART_ENTRY_NUMBER}=="1", ENV{DEVTYPE}=="partition",
    

    สำหรับพาร์ติชันหมายเลข 1 บนบรรทัดกฎ udev

พบกฎ udev /etc/udev/rules.dหากคุณมีระบบสติ

  1. ตอนนี้คุณสามารถ

    udevadm control --reload
    

    เพื่อโหลดกฎและ

    udevadm monitor
    

    เพื่อตรวจสอบสิ่งที่เกิดขึ้นในระหว่างขั้นตอนที่ 5

  2. Plugout และปลั๊กอินอุปกรณ์ usb ของคุณ (แน่นอนหลังจากเลิกเมานท์มาก่อนหากคุณติดตั้ง) จอภาพควรแจ้งให้คุณทราบเกี่ยวกับอุปกรณ์ใหม่เมื่อเริ่มต้นใช้งาน

  3. ตรวจสอบว่า/dev/มีสัญลักษณ์ที่ถูกต้องหรือไม่ ในตัวอย่างของฉันฉันได้รับสิ่งนี้:

    brw-rw---- 1 ingo disk    8,  48 Aug  3 10:32 sdd
    brw-rw---- 1 ingo disk    8,  32 Aug  3 10:32 sdc
    lrwxrwxrwx 1 root root         3 Aug  3 10:32 pocketbook-sd -> sdd
    lrwxrwxrwx 1 root root         3 Aug  3 10:32 pocketbook -> sdc
    

ตอนนี้คุณสามารถกำหนดกฎถาวรด้วย symlink /dev/pocketbookและ/dev/pocketbook-sdหรือชื่อของคุณในฟิลด์ SYMLINK ของไฟล์กฎ udev


1
ขอบคุณสำหรับคำตอบ. อย่างไรก็ตามฉันจะไม่สามารถใช้งานได้ อุปกรณ์ที่ฉันกำลังทำงานติดตั้งอยู่บนภูเขาไฟและ usb stick ถูกใช้เพื่อเก็บข้อมูลที่ได้มา เราจะไปที่นั่นทุกๆสามเดือนเพื่อเปลี่ยนก้าน usb ฉันมีรีโมทระยะไกลถึงไม่มีอินเทอร์เฟซ "หน้าจอ" เนื่องจาก usb จะแตกต่างกันตลอดเวลา แต่เสียบเข้ากับพอร์ต usb เดียวกันฉันคิดว่าวิธีที่ง่ายกว่าคือการรักษาเส้นทาง sdc1 ฉันจะเห็นด้วย udev กฎสิ่งที่ฉันสามารถทำได้
Gudrun

0

เพียงเพิ่มคำตอบของ @ alextartan

ฉันใช้ระบบสำรองข้อมูลของตัวเองซึ่งใช้ไดรฟ์ USB เป็นเป้าหมาย ฉันต้องแน่ใจว่าเกิดอะไรขึ้น เนื่องจาก UUID ไม่ได้เป็นมิตรกับผู้ใช้โดยเฉพาะฉันจึงต้องพึ่งพาป้ายดิสก์

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

ฉันคิดวิธีการทำฉลากที่เป็นเอกลักษณ์ (เป็นมิตรกับมนุษย์) ของตัวเองและใช้ gparted เพื่อทำป้ายพาร์ติชั่นต่าง ๆ เมื่อฉันสร้างมันขึ้นมา

เมื่อสคริปต์ของฉันต้องการเข้าถึงพาร์ติชันเฉพาะฉันค้นหาชื่ออุปกรณ์โดยใช้ป้ายกำกับ

function get_dev {
  ## Return the device name of a partition
  ## In DEV
  ## Given its label
  ## Partition does not need to be mounted
  ## Usage get_dev <partition_label>
  ## Copyleft 04/28/2014 JPmicrosystems
  local LINE
  local VERBOSE=1  ## Verbose version
  local USAGE="ERROR Usage is: get_dev <partition_label>"
  unset DEV

  if [ -z "${1}" ]
  then
    (( VERBOSE )) && echo $USAGE
    return 1
  fi

  LINE=$(ls -l /dev/disk/by-label | grep " ${1} ")
  if (( $? ))
  then
    (( VERBOSE )) && echo "ERROR Partition [${1}] not found"
    return 1
  fi

  DEV="/dev/${LINE##*/}"
  return 0
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.