การติด USB อัตโนมัติบน Debian


10

ฉันใช้ Debian Squeeze บนคอมพิวเตอร์ปลั๊ก (ดังนั้น SSH เท่านั้น, ไม่มี GUI) และสิ่งที่ฉันพยายามทำคือเอามันมาให้เมื่อเสียบปลั๊ก USB มันจะถูกเมาท์โดยอัตโนมัติ

สิ่งที่ฉันทำคือการติดตั้งautofsสิ่งที่ฉันรวบรวมได้จากการจัดการติดตั้งอัตโนมัติซึ่งรู้ว่าอุปกรณ์อยู่ที่/devใด

ปัญหาคือแท่ง USB ไม่ได้อยู่ในชื่ออุปกรณ์เดียวกันเสมอไป บางครั้งมัน/dev/sdc1บางครั้ง/dev/sdd1ฯลฯ

ฉันรวบรวมสิ่งนั้นเพื่อแก้ไขปัญหานี้ฉันต้องใช้udevเพื่อให้แน่ใจว่าแท่ง USB ได้รับชื่อเดียวกันเสมอ

ฉันได้รับข้อมูลต่อไปนี้จากudevadm:

Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

  looking at device '/block/sdd/sdd1':
    KERNEL=="sdd1"
    SUBSYSTEM=="block"
    DRIVER==""
    ATTR{partition}=="1"
    ATTR{start}=="63"
    ATTR{size}=="129339"
    ATTR{ro}=="0"
    ATTR{alignment_offset}=="0"
    ATTR{discard_alignment}=="0"
    ATTR{stat}=="      31      244      275      190        0        0        0        0        0      190      190"
    ATTR{inflight}=="       0        0"

  looking at parent device '/devices/platform/orion-ehci.0/usb1/1-1/1-1.2/1-1.2:1.0/host8/target8:0:0/8:0:0:0/block/sdd':
    KERNELS=="sdd"
    SUBSYSTEMS=="block"
    DRIVERS==""
    ATTRS{range}=="16"
    ATTRS{ext_range}=="256"
    ATTRS{removable}=="1"
    ATTRS{ro}=="0"
    ATTRS{size}=="129439"
    ATTRS{alignment_offset}=="0"
    ATTRS{discard_alignment}=="0"
    ATTRS{capability}=="51"
    ATTRS{stat}=="      56      727      783      520        0        0        0        0        0      520      520"
    ATTRS{inflight}=="       0        0"
    ATTRS{events}=="media_change"
    ATTRS{events_async}==""
    ATTRS{events_poll_msecs}=="-1"

  looking at parent device '/devices/platform/orion-ehci.0/usb1/1-1/1-1.2/1-1.2:1.0/host8/target8:0:0/8:0:0:0':
    KERNELS=="8:0:0:0"
    SUBSYSTEMS=="scsi"
    DRIVERS=="sd"
    ATTRS{device_blocked}=="0"
    ATTRS{type}=="0"
    ATTRS{scsi_level}=="3"
    ATTRS{vendor}=="        "
    ATTRS{model}=="Flash Disk      "
    ATTRS{rev}=="2.00"
    ATTRS{state}=="running"
    ATTRS{timeout}=="30"
    ATTRS{iocounterbits}=="32"
    ATTRS{iorequest_cnt}=="0x90"
    ATTRS{iodone_cnt}=="0x90"
    ATTRS{ioerr_cnt}=="0x0"
    ATTRS{modalias}=="scsi:t-0x00"
    ATTRS{evt_media_change}=="0"
    ATTRS{queue_depth}=="1"
    ATTRS{queue_type}=="none"
    ATTRS{max_sectors}=="240"

  looking at parent device '/devices/platform/orion-ehci.0/usb1/1-1/1-1.2/1-1.2:1.0/host8/target8:0:0':
    KERNELS=="target8:0:0"
    SUBSYSTEMS=="scsi"
    DRIVERS==""

  looking at parent device '/devices/platform/orion-ehci.0/usb1/1-1/1-1.2/1-1.2:1.0/host8':
    KERNELS=="host8"
    SUBSYSTEMS=="scsi"
    DRIVERS==""

  looking at parent device '/devices/platform/orion-ehci.0/usb1/1-1/1-1.2/1-1.2:1.0':
    KERNELS=="1-1.2:1.0"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb-storage"
    ATTRS{bInterfaceNumber}=="00"
    ATTRS{bAlternateSetting}==" 0"
    ATTRS{bNumEndpoints}=="02"
    ATTRS{bInterfaceClass}=="08"
    ATTRS{bInterfaceSubClass}=="06"
    ATTRS{bInterfaceProtocol}=="50"
    ATTRS{modalias}=="usb:v1976p6025d0100dc00dsc00dp00ic08isc06ip50"
    ATTRS{supports_autosuspend}=="1"

  looking at parent device '/devices/platform/orion-ehci.0/usb1/1-1/1-1.2':
    KERNELS=="1-1.2"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{configuration}==""
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bmAttributes}=="80"
    ATTRS{bMaxPower}=="100mA"
    ATTRS{urbnum}=="383"
    ATTRS{idVendor}=="1976"
    ATTRS{idProduct}=="6025"
    ATTRS{bcdDevice}=="0100"
    ATTRS{bDeviceClass}=="00"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{speed}=="12"
    ATTRS{busnum}=="1"
    ATTRS{devnum}=="11"
    ATTRS{devpath}=="1.2"
    ATTRS{version}==" 1.10"
    ATTRS{maxchild}=="0"
    ATTRS{quirks}=="0x0"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{authorized}=="1"

  looking at parent device '/devices/platform/orion-ehci.0/usb1/1-1':
    KERNELS=="1-1"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{configuration}==""
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bmAttributes}=="e0"
    ATTRS{bMaxPower}=="100mA"
    ATTRS{urbnum}=="197"
    ATTRS{idVendor}=="1a40"
    ATTRS{idProduct}=="0101"
    ATTRS{bcdDevice}=="0111"
    ATTRS{bDeviceClass}=="09"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="01"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{speed}=="480"
    ATTRS{busnum}=="1"
    ATTRS{devnum}=="2"
    ATTRS{devpath}=="1"
    ATTRS{version}==" 2.00"
    ATTRS{maxchild}=="4"
    ATTRS{quirks}=="0x0"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{authorized}=="1"
    ATTRS{product}=="USB 2.0 Hub"

  looking at parent device '/devices/platform/orion-ehci.0/usb1':
    KERNELS=="usb1"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{configuration}==""
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bmAttributes}=="e0"
    ATTRS{bMaxPower}=="  0mA"
    ATTRS{urbnum}=="24"
    ATTRS{idVendor}=="1d6b"
    ATTRS{idProduct}=="0002"
    ATTRS{bcdDevice}=="0206"
    ATTRS{bDeviceClass}=="09"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="01"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{speed}=="480"
    ATTRS{busnum}=="1"
    ATTRS{devnum}=="1"
    ATTRS{devpath}=="0"
    ATTRS{version}==" 2.00"
    ATTRS{maxchild}=="1"
    ATTRS{quirks}=="0x0"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{authorized}=="1"
    ATTRS{manufacturer}=="Linux 2.6.38.8 ehci_hcd"
    ATTRS{product}=="Marvell Orion EHCI"
    ATTRS{serial}=="orion-ehci.0"
    ATTRS{authorized_default}=="1"

  looking at parent device '/devices/platform/orion-ehci.0':
    KERNELS=="orion-ehci.0"
    SUBSYSTEMS=="platform"
    DRIVERS=="orion-ehci"
    ATTRS{modalias}=="platform:orion-ehci"

  looking at parent device '/devices/platform':
    KERNELS=="platform"
    SUBSYSTEMS==""
    DRIVERS==""

ฉันพยายามเขียนudevกฎเพื่อบังคับให้ USB stick ใช้ชื่อ/dev/usbstickแต่จนถึงตอนนี้ฉันยังไม่ประสบความสำเร็จ

ใครสามารถช่วยด้วยกฎที่ฉันต้องระบุในไฟล์กฎของฉันเพื่อรับ USB stick นี้เพื่อให้ได้ชื่อเดียวกันเสมอ?

- หรือมีวิธีที่ง่ายกว่าในการเมานท์ USB แบบอัตโนมัติที่ฉันหายไปทั้งหมดหรือไม่

UPDATE

ตกลงดังนั้นฉันมีความคืบหน้าบางอย่าง ฉันเพิ่มกฎต่อไปนี้:

SUBSYSTEMS=="scsi", ATTRS{model}=="Flash Disk ", DRIVERS=="sd", NAME="usbstick-%k" RUN+="mkdir /mnt/usbstick-%k; mount /dev/usbstick-%k /mnt/usbstick-%k"

ฉันรู้ว่านี่ยังคงต้องใช้งานในแง่ของการจัดการเพิ่ม / ลบ แต่มันเป็นเพียงการทดสอบขั้นพื้นฐานสำหรับตอนนี้

ผลของการนี้ก็คือว่าตอนนี้ฉันจัดการเพื่อให้ได้สามโหนดอุปกรณ์ใหม่ใน/devคือ/dev/usbstick-sdc, และ/dev/usbstick-sdc1usbstick-sg2

แต่สิ่งที่ฉันได้พบก็คือว่ารหัสในการเพียงบางส่วนดำเนินการทันทีและเพียงแค่ทำให้ไดเรกทอรีRUN mnt/usbstick-sdcฉันยังพบว่าไดเรกทอรีนั้นว่างอยู่เสมอดังนั้นบางสิ่งบางอย่างยังคงผิดพลาดอยู่! (แม้ว่าฉันจะก้าวหน้า)


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

ถูกต้องแก้ไขเพียงว่า สิ่งที่ฉันต้องการจะเกิดขึ้นก็คือเมื่อเสียบปลั๊ก USB เข้าไปแล้วมันจะถูกเมาท์เข้ากับไดเรกทอรีบางตัว ฉันค่อนข้างแน่ใจว่าฉันควรใช้udevกฎเพื่อสร้างโหนดอุปกรณ์สำหรับแต่ละพาร์ติชัน แต่ฉันไม่แน่ใจว่าระดับของudevadmเอาต์พุตที่จะสร้างกฎสำหรับ!
จอน

กฎของคุณดูซับซ้อนเกินไป พยายามทำให้เป็นเรื่องง่ายโดยมีเพียงหนึ่งACTION==หนึ่งKERNEL==และหนึ่งATTRS{something}==(เป็นไปได้อย่างสมบูรณ์ - นี่คือสิ่งที่ฉันใช้) นอกจากนี้ให้พิจารณาการทำงานสคริปต์เดียว instaed RUN+=ของห่วงโซ่ของคำสั่งใน
rozcietrzewiacz

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

ตอนนี้ฉันลองกฎพื้นฐานนี้แล้ว: KERNEL=="sd??", NAME="%k", RUN+="mkdir /mnt/usbstick-%k; mount /dev/usbstick-%k /mnt/usbstick-%k"- แต่ไม่แน่นอนว่ามันไม่ได้ผลเช่นกัน ตอนนี้ฉันเริ่มรู้สึกท้อแท้มากขึ้นหลังจากใช้เวลาเกือบทั้งวันแค่พยายามหาวิธีใช้แท่ง USB ที่ต่อเข้ากับตัวเอง สิ่งที่ควรจะเป็นเรื่องยากจริง ๆ ? แน่นอนว่าผลลัพธ์จากudevadm test /sys/block/sdd- แน่นอน - อ่านไม่ได้ในทางปฏิบัติดังนั้นฉันจึงไม่มีทางรู้ว่าฉันจะไปไหนผิด ใครช่วยชี้ทางฉันให้ถูกทาง?
จอน

คำตอบ:


13

คิดว่าควรจะมีวิธีที่ง่ายกว่ามากในการจัดการปัญหาที่พบบ่อยและมี นี่คือสิ่งที่ฉันพยายามบนเซิร์ฟเวอร์ wheezy / sid ของฉัน:

sudo apt-get install usbmount

เสียบปลั๊ก usb เสร็จแล้ว! ตอนนี้ฉันสามารถเข้าถึงไม้เท้าของฉันได้/media/usbแล้ว

Btw, usbmount ไม่มี man page โปรดอ่าน/usr/share/doc/usbmount/README.gzแทน ดูเหมือนว่า usbmount จะเมาท์ของคุณด้วยตัวเลือกการซิงค์โดยค่าเริ่มต้น มันอาจจะดีกว่าที่คุณจะติดมัน async และรันsyncหรือumountก่อนที่จะถอดปลั๊ก นั่นคือการกำหนดค่า


ดูเพิ่มเติมpumount
อเล็กซ์

โปรดทราบว่าusbmountไม่สนับสนุน NTFS อีกต่อไปตั้งแต่เดเบียนเจสซี
malat

ทำงานนี้บน Debian Jessie, usbmount ไม่น่าจะติดมัน หน้าแพคเกจบอกว่าตอนนี้ไม่ได้ทำให้สะอาดแล้วและฉันใช้ systemd ฉันสงสัยว่าแพคเกจนี้ใช้ไม่ได้กับการเปลี่ยนแปลงของ systemd หรือไม่
Travis Griggs

อันที่จริงไม่ได้ผลสำหรับฉันที่ Jessie ดูคำตอบของฉัน (นี่: ddumont.wordpress.com/2015/09/27/..ได้ทำงาน)
พอล

2

โปรดสังเกตว่าคุณไม่สามารถมีโหนดอุปกรณ์เพียงโหนดเดียวในการแสดงpendrive ที่เป็นไปได้ใด ๆ ที่แนบมา เกิดอะไรขึ้นถ้าคุณเสียบสองของพวกเขา หรือเมื่อ pendrive มีมากกว่าหนึ่งพาร์ติชั่น

SYMLINK+=โดยทั่วไปสิ่งที่คุณใช้ในการสร้างโหนดอุปกรณ์ที่กำหนดเองที่มีชื่อเป็น grep สำหรับมันในกฎเพื่อดูว่ามันถูกใช้อย่างไร: grep SYMLINK /etc/udev/rules.d/*. ในขณะที่คำสั่ง udev man udevเรียกทุกท่านสามารถใช้ตัวแปรที่มีความหมายบางอย่างที่อธิบายไว้ใน คุณอาจรู้ว่าคุณไม่จำเป็นต้องให้ชื่อที่กำหนดเองกับอุปกรณ์เนื่องจากคุณสามารถป้อนชื่อเป็นสคริปต์ (ผ่าน%kตัวแปร)

สำหรับโซลูชันเมาท์อัตโนมัติให้ดูที่UAMซึ่งฉันได้อธิบายเล็กน้อยในคำตอบของคำถามนี้


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

จากนั้นดูการแก้ไขที่ฉันเพิ่งทำ (ส่วนตรงกลาง) จะเพียงพอหรือไม่
rozcietrzewiacz

โปรดทราบว่า UAM ไม่ใช่โปรแกรมจริงๆ - เป็นudevกฎที่ดีสำหรับสคริปต์ที่มาพร้อมกัน คุณสามารถดูกฎและปรับให้เข้ากับความต้องการของคุณได้อย่างง่ายดาย
rozcietrzewiacz

ขอบคุณสำหรับคำแนะนำ. อีกอย่างหนึ่ง: คุณคิดว่าคุณสามารถดูผลลัพธ์จากudevadmฉันและบอกฉันว่าอุปกรณ์ใดเป็นอุปกรณ์ที่ฉันควรกำหนดเป้าหมายตามกฎของฉันจริงหรือไม่ ตัวอย่างต่าง ๆ ที่ฉันเห็นออนไลน์นั้นดูเหมือนจะเกี่ยวข้องกับต้นไม้ที่สั้นกว่ามากและแต่ละตัวอย่างดูเหมือนว่าจะกำหนดเป้าหมายอุปกรณ์ในระดับที่แตกต่างกันโดยไม่มีคำอธิบายว่าควรจะกำหนดเป้าหมายแบบใดและทำไม
จอน

เพิ่งเพิ่มการอัปเดตด้านบนความคิดใด ๆ ขอบคุณ!
จอน

2

นี่คือวิธีที่ฉันทำเมื่อไม่นานมานี้และฉันมีความสุขมากกับวิธีการนี้ในขณะนี้ นี่สำหรับ Ubuntu 12.04 + Gentoo แต่ฉันเดาว่า distro ใด ๆ ที่อนุญาตให้ติดตั้ง udev และ autofs ควรใช้งานได้

สิ่งที่จำเป็นต้องมี: คุณต้องติดตั้ง udev + autofs

ขั้นตอนที่ 1)

สร้างไฟล์ "/etc/udev/rules.d/90-usbsd-auto.rules" ต่อไปนี้ (แน่นอนว่าคุณอาจใช้ชื่อใดก็ได้ตราบใดที่ลงท้ายด้วย ".rules") :

# Add symlink /dev/usbdisks/<label> to /dev/sd[a-z][1-9] 
# for automounter support

ACTION=="add", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
    ENV{ID_BUS}=="usb", \
    SYMLINK+="usbdisks/%k", MODE:="0660", \
    RUN+="/bin/rm /media/usb/%k", \
    RUN+="/bin/ln -sf /media/autousb/%k /media/usb/%k"

# Some FileSystems emit a "change" event when they are unmounted.
# UDEV seems to delete the device symlink in this case :-(
# So we need to re-create it here
ACTION=="change", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
    ENV{ID_BUS}=="usb", \
    SYMLINK+="usbdisks/%k", MODE:="0660"


# When device is removed, also remove /media/usb/<...>
ACTION=="remove", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
    ENV{ID_BUS}=="usb", \
    RUN+="/bin/rm /media/usb/%k"

มันทำอะไร: มันสร้าง symlink สองอันหนึ่งอันสำหรับพาร์ติชั่นอุปกรณ์เก็บข้อมูล USB ภายใต้ "/ dev / usbdisks / <... >"

symlink ตัวที่สองจะเชื่อมโยงจาก "/ media / usb / <... >" ถึง "/ media / autousb / <... >" สิ่งนี้จะทำเพื่อการสนับสนุน automounter (ดูขั้นตอนที่ 2)

เพื่อให้แน่ใจว่า udev อ่านกฎเหล่านี้ใช้

sudo udevadm control --reload-rules

หมายเหตุ: ชื่อเดียวกันสำหรับ usb stick เดียวกัน: อาจเป็นไปได้ แต่อาจเป็นอันตราย: คุณอาจใช้ตัวอย่างเช่น "$ env {ID_FS_LABEL_ENC}" แทนที่จะเป็น "% k" ในกฎ UDEV ข้างต้น สิ่งนี้จะใช้ป้ายกำกับระดับเสียงเพื่อสร้าง / media / usb / <... > แต่จะเกิดอะไรขึ้นหากคุณเสียบปลั๊ก USB สองอันและทั้งคู่ใช้ป้ายกำกับระดับเสียงเดียวกัน ...

ด้วยไฟล์กฎ udev นี้ทุกอย่างได้รับการตั้งค่าให้ติดตั้งพาร์ติชันอุปกรณ์เก็บข้อมูล USB แบบอัตโนมัติ โปรดทราบว่าในตอนนี้อุปกรณ์จะไม่ถูกเมานท์อัตโนมัติ (โดยเจตนา) มันจะเป็นแบบอัตโนมัติเมื่อคุณใช้งานด้วย

ขั้นตอนที่ 2)

ตั้งค่า autofs เป็น automount / media / autousb / <... >: ฉันเพิ่มบรรทัดต่อไปนี้ในไฟล์ "/etc/auto.master" ของฉัน (สำหรับ Ubuntu 12.04):

/media/autousb /etc/auto.usb --timeout=60

ซึ่งหมายความว่า AutoFS จะยกเลิกการต่อเชื่อมอุปกรณ์หลังจากไม่มีกิจกรรมใด ๆ เป็นเวลา 60 วินาที คุณอาจต้องการใช้น้อยหรือมากขึ้นอยู่กับรสนิยมของคุณ

สำหรับ Gentoo คุณต้องแก้ไข "/etc/autofs/auto.master" ดังนั้นจึงเหมาะสมที่จะใช้

/media/autousb /etc/autofs/auto.usb --timeout=60

ตอนนี้ฉันสร้าง "auto.usb" ด้วยเนื้อหาต่อไปนี้:

#!/bin/bash

key=${1}
fstype=$(/sbin/blkid -o value -s TYPE /dev/usbdisks/${key})
if [ "${fstype}" = "vfat" ] ; then
  echo "-fstype=vfat,sync,uid=0,gid=plugdev,umask=007 :/dev/usbdisks/${key}"
  exit 0
fi
if [ "${fstype}" = "ntfs" ] ; then
  echo "-fstype=fuse.ntfs-3g,sync,uid=0,gid=plugdev,umask=007 :/dev/usbdisks/${key}"
  exit 0
fi
if [ "${fstype}" = "ext4" ] ; then
  echo "-fstype=ext4,sync,nocheck :/dev/usbdisks/${key}"
  exit 0
fi

exit 1

auto.usb นี้ต้องสามารถเรียกใช้งานได้ดังนั้น autofs จึงใช้สคริปต์นี้เป็น (ทุบตี) ตัวอย่างเช่น

sudo chmod 0755 /etc/auto.usb

สิ่งนี้ทำอะไร: สคริปต์นี้จะบอก AutoFS (/ usr / sbin / automount) วิธีติดตั้งพาร์ติชันอุปกรณ์เก็บข้อมูล usb

สคริปต์จะใช้ "/ sbin / blkid" ก่อนเพื่อค้นหาว่าระบบไฟล์ประเภทใดอยู่ในพาร์ติชัน

สคริปต์จะมีตัวเลือกการเมาท์ที่ถูกต้องขึ้นอยู่กับพาร์ติชันอุปกรณ์

หมายเหตุ: ฉันรวมรหัสตัวอย่างสำหรับ "vfat" (อาจเป็นเรื่องธรรมดาสำหรับ usb sticks), "ntfs" และ "ext4" แน่นอนว่ามันเป็นการขยายที่ง่ายมากเพื่อรองรับระบบไฟล์ที่มากขึ้น

ขั้นตอนที่ 3)

ไม่บังคับ ... หากต้องการ "eject" == เลิกเมานท์ usb stick (หรือพาร์ติชันบน usb stick ของคุณ) สร้างสคริปต์ภายใต้ / sbin / usbeject:

#!/bin/bash
# make sure everything is written to USB disk(s)
sync
# sending SIUGSR1 to automount will unmount the media
killall -s SIGUSR1 /usr/sbin/automount

ด้วยสคริปต์นี้คุณอาจใช้ "sudo usbeject" เพื่อ unmount พาร์ติชันอุปกรณ์ USB ที่เมาท์ทั้งหมด (โดยบอกให้ automount ยกเลิกการเมานท์)

แน่นอนคุณสามารถตรวจสอบให้แน่ใจว่าพาร์ทิชันไม่ได้ใช้ทุกที่ automounter จะยกเลิกการต่อเชื่อมพาร์ติชั่นหลังจากหมดเวลา 60 วินาที ...

เคล็ดลับที่แท้จริงที่นี่คือการใช้ symlink จาก "/ media / usb" ถึง "/ media / autousb":

  • ลิงก์ "/ media / usb" จะถูกสร้างโดย udev ทำให้ผู้ใช้มีภาพรวมอย่างง่าย ๆ ซึ่งมีพาร์ทิชันอุปกรณ์เก็บข้อมูล usb
  • AutoFS จะทำการติดตั้งพาร์ติชั่นอัตโนมัติตามต้องการถ้าคุณใช้มันผ่าน / media / usb
  • ด้วยไฟล์ "auto.usb" สคริปต์คุณอาจสนับสนุนระบบไฟล์ทุกประเภทและนอกจากนี้คุณยังสามารถรองรับรูปแบบการตั้งชื่อประเภทใดก็ได้
  • วิธีนี้รองรับ USB sticks ที่มีหลายพาร์ติชันแม้ว่าพาร์ทิชันเหล่านี้จะใช้ระบบไฟล์ประเภทต่าง ๆ

ฉันสามารถแสดงให้คุณเห็นว่าคำแนะนำ autofs ทำลายไดเรกทอรี / home / frank ของฉันได้อย่างไร ขอบคุณ.
แฟรงก์

1

ขออภัยที่จะตอบคำถามของฉันและขอบคุณมากเนื่องจากrozcietrzewiaczสำหรับการมีส่วนร่วม แต่ในที่สุดฉันก็สามารถทำให้ความคืบหน้าสำคัญบางอย่างโดยใช้กฎต่อไปนี้หลังจากผ่านไปหลายชั่วโมงของการอ่านออนไลน์:

SUBSYSTEMS=="scsi", KERNEL=="sd[a-h]1", SYMLINK+="removable", RUN+="/bin/mount /dev/removable /path/to/mount"

นี่จะเมาต์พาร์ติชันแรกของอุปกรณ์ SCSI ใด ๆ ฉันเดาว่าคำถามต่อไปจะเป็นวิธีติดตั้งหลายพาร์ติชัน แต่นั่นเป็นปัญหาอีกวันหนึ่ง


1
มันไม่ได้เป็นกฎที่ดี นี้จะตรงกับยังพาร์ทิชันของฮาร์ดไดรฟ์ มีremovableคุณลักษณะที่คุณควรทดสอบและค่อนข้างแทนblock scsi
rozcietrzewiacz

1

ฉันพบว่าคำตอบที่ดีที่สุดได้กลายเป็นเลิกเนื่องจากยังไม่ได้รับการบำรุงรักษาและไม่ทำงานบน / จาก Jessie (ดูความคิดเห็นโดย malat)

สำหรับฉัน (บนเจสซี) ทางออกในบล็อกนี้ทำงานเหมือนมีเสน่ห์

ให้เครดิตกับ "ddumont" แต่โพสต์ภาพรวมของบล็อก / คำตอบของเขาที่นี่เพื่อจัดการกับการเชื่อมโยงที่เป็นไปได้เน่าในอนาคต

เพิ่มบรรทัดต่อไปนี้ลงใน /etc/fstab

/dev/sr0 /media/bluray auto defaults,nofail,x-systemd.automount 0 2

คุณสามารถทำได้โดยใช้นาโน:

sudo nano /etc/fstab

คำอธิบาย:

/dev/sr0เป็นไฟล์อุปกรณ์ คุณยังสามารถใช้หนึ่งในการตั้งค่าลิงก์สัญลักษณ์โดย udev ใน / dev / disk / by-id คุณจะต้องเปลี่ยนแปลงสิ่งนี้ตามไฟล์อุปกรณ์ของคุณ ( sudo fdisk -lไปยังรายการอุปกรณ์)

/media/blurayคือจุดเมานท์ คุณสามารถเลือกจุดเชื่อมต่ออื่น

nofail จำเป็นเพื่อหลีกเลี่ยงรายงานความล้มเหลวเมื่อทำการบูทโดยไม่มีดิสก์ในออปติคัลไดรฟ์

x-systemd.automount เป็นตัวเลือกในการกำหนดค่า systemd เพื่อทำการเมานท์แผ่นดิสก์ที่ใส่เข้าไปโดยอัตโนมัติ

อย่าระบุ noauto: สิ่งนี้จะป้องกันไม่ให้ systemd ติดตั้งดิสก์โดยอัตโนมัติซึ่งเอาชนะวัตถุประสงค์

ทดสอบ

รันคำสั่งjournalctl -x -fในเทอร์มินัลเพื่อตรวจสอบสิ่งที่เกิดขึ้นกับ systemd

โหลด systemd sudo systemctl daemon-reloadกับการกำหนดค่า

โหลดแผ่นดิสก์ในออปติคัลไดรฟ์ของคุณ

จากนั้น journalctl ควรแสดงดังนี้:

Sept. 27 16:07:01 frodo systemd[1]: Mounted /media/bluray.

ต่อไป

ในการติดตั้งไดรฟ์ NTFS ให้เรียบร้อยฉันต้องติดตั้ง ntfs-3g (ntfsprogs แบบเก่า)

sudo apt-get install ntfs-3g

ฉันไม่ต้องติดตั้ง hfsprogs เพื่อให้ยูเอสบีฟอร์แมต OSX ทำงาน แต่คุณควรตรวจสอบด้วยตัวคุณเอง


มันไม่ได้เชื่อมต่อกับเจสซี Debian ของฉันโดยอัตโนมัติด้วย USB-HDD
buhtz

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