연결되면 Debian Bookworm에 USB 드라이브를 자동 마운트하려고 시도합니다.

연결되면 Debian Bookworm에 USB 드라이브를 자동 마운트하려고 시도합니다.

데비안 12(bookworm)에서 autofs를 통해 USB 하드 드라이브를 마운트할 수 없습니다.이 리소스비슷한 질문도 있지만 아무 것도 작동하지 않는 것 같습니다. 데비안 책벌레(터미널에서 - GUI가 실행되지 않음)에서 USB 드라이브를 자동으로 마운트하는 현재 방법은 무엇입니까?

내 /etc/auto.master:

+dir:/etc/auto.master.d
+auto.master
/media   /etc/auto.ext-usb --timeout=2,sync,nodev,nosuid

내 /etc/auto.ext-usb:

usbbackup             -fstype=auto       UUID=7c26a13b-2f28-4fbd-a0dc-6ce6c8a63dad

(blkid에서 uuid를 계산했고 드라이브는 ext4로 포맷되었습니다. 예를 들어 /mnt/usb에 문제 없이 수동으로 마운트할 수 있습니다.)

답변1

저는 데비안 기반 Linux Mint를 사용하고 있지만 이는 데비안 책벌레에서도 작동할 것입니다.
이건 직업이야udev 서비스, systemd의 확장 장치 관리자입니다.
일부 하드웨어가 연결되어 있고 일부 추가 모듈을 로드하거나 일부 실행 중인 작업을 시작할 수 있는 경우 커널 알림을 받게 됩니다.
하지만 udev 실행 작업에서는 bin 폴더의 하위 수준 마운트 명령을 호출할 수 없으며 작동하지 않고 문제가 발생합니다.
당신은해야합니다시스템 마운트 https://manpages.debian.org/bookworm/systemd/systemd-mount.1.en.html, udev가 실행을 완료하면 udev 외부의 작업이 완료됩니다.

  1. udev 데몬이 실행 중인지 확인 systemctl list-units *udevd.service
    하고 systemd-mount를 확인하세요.ls /usr/bin/systemd-mount
  2. 장치 노드/경로 가져오기 - 파일 관리자를 사용하여 수동으로 USB 드라이브를 마운트하고, USB 스틱
    Open 터미널을 사용하고 USB 드라이브에서 출력되는 파일 또는 디렉터리에 대해 df 명령을 실행했습니다
    df "filename|directory on your USB drive"
    .
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sdf1        3997696 2821980   1175716  71% ...

이제 USB 드라이브에 대한 장치 노드/경로가 생겼습니다./dev/sdf1

  1. udev 규칙에 필요한 장치 속성과 환경 변수를 udev 데이터베이스에서 가져옵니다.
    USB 드라이브를 분리하고 연결할 때마다 개발 경로가 변경되거나
    udevadm info /dev/sdf1첫 번째 USB 드라이브의 자세한 출력이 표시되므로 udev 규칙을 적용해야 하는 장치를 정확히 식별해야 합니다.
    udevadm info --attribute-walk /dev/sdf1

P: /devices/pci0000:00/0000:00:09.0/0000:02:00.0/usb8/8-1/8-1:1.0/host6/target6:0:0/6:0:0:0/block/sdf/sdf1
N: sdf1
L: 0
S: disk/by-id/usb-SanDisk_U3_Cruzer_Micro_0000186F6A60343E-0:0-part1
S: disk/by-uuid/3CF6-EEA5
S: disk/by-path/pci-0000:02:00.0-usb-0:1:1.0-scsi-0:0:0:0-part1
S: disk/by-partuuid/e41c7c97-01
E: DEVPATH=/devices/pci0000:00/0000:00:09.0/0000:02:00.0/usb8/8-1/8-1:1.0/host6/target6:0:0/6:0:0:0/block/sdf/sdf1
E: DEVNAME=/dev/sdf1
E: DEVTYPE=partition
E: DISKSEQ=21
E: PARTN=1
E: MAJOR=8
E: MINOR=81
E: SUBSYSTEM=block
E: USEC_INITIALIZED=2220353618
E: ID_VENDOR=SanDisk
E: ID_VENDOR_ENC=SanDisk\x20
E: ID_VENDOR_ID=0781
E: ID_MODEL=U3_Cruzer_Micro
E: ID_MODEL_ENC=U3\x20Cruzer\x20Micro\x20
E: ID_MODEL_ID=5406
E: ID_REVISION=3.21
E: ID_SERIAL=SanDisk_U3_Cruzer_Micro_0000186F6A60343E-0:0
E: ID_SERIAL_SHORT=0000186F6A60343E
E: ID_TYPE=disk
E: ID_INSTANCE=0:0
E: ID_BUS=usb
E: ID_USB_INTERFACES=:080650:
E: ID_USB_INTERFACE_NUM=00
E: ID_USB_DRIVER=usb-storage
E: ID_PATH=pci-0000:02:00.0-usb-0:1:1.0-scsi-0:0:0:0
E: ID_PATH_TAG=pci-0000_02_00_0-usb-0_1_1_0-scsi-0_0_0_0
E: ID_PART_TABLE_UUID=e41c7c97
E: ID_PART_TABLE_TYPE=dos
E: ID_DRIVE_THUMB=1
E: ID_FS_UUID=3CF6-EEA5
E: ID_FS_UUID_ENC=3CF6-EEA5
E: ID_FS_VERSION=FAT32
E: ID_FS_TYPE=vfat
E: ID_FS_USAGE=filesystem
E: ID_PART_ENTRY_SCHEME=dos
E: ID_PART_ENTRY_UUID=e41c7c97-01
E: ID_PART_ENTRY_TYPE=0xc
E: ID_PART_ENTRY_NUMBER=1
E: ID_PART_ENTRY_OFFSET=2048
E: ID_PART_ENTRY_SIZE=8011776
E: ID_PART_ENTRY_DISK=8:80
E: DEVLINKS=/dev/disk/by-id/usb-SanDisk_U3_Cruzer_Micro_0000186F6A60343E-0:0-part1 /dev/disk/by-uuid/3CF6-EEA5 /dev/disk/by-path/pci-0000:02:00.0-usb-0:1:1.0-scsi-0:0:0:0-part1 /dev/disk/by-partuuid/e41c7c97-01
E: TAGS=:systemd:
E: CURRENT_TAGS=:systemd:

E: 즉, 이것은 내 udev 규칙에 대한 환경 변수입니다.
저는 이 변수를 사용합니다.ID_FS_UUID=3CF6-EEA5내 장치 식별
이것은 내 USB 플래시 드라이브에 있는 파일 시스템의 UUID 번호입니다.

  1. udev 규칙을 작성하고 다음 위치에 저장합니다./etc/udev/rules.d디렉터리
    규칙은 확장명을 사용하여 저장해야 합니다..규칙
    udev 규칙은 사전식 순서로 실행되고 서로 재정의될 수 있으므로 이름 시작 부분에 숫자를 사용합니다.
    루트 권한 얻기 -> 파일 열기99_myrule.rules

udev 규칙:

ENV{ID_FS_UUID}=="3CF6-EEA5", ACTION=="add", RUN{program}+="/usr/bin/systemd-mount --no-block --collect $devnode /my/mount/directory/"

구하다!
ENV{ID_FS_UUID}=="3CF6-EEA5"는
장치의 환경 변수 ID_FS_UUID가 3CF6-EEA5와 같은지 확인하는 것을 의미하고,
ACTION=="add"는
장치가 현재 있기 때문에 udev 이벤트가 트리거되는 이유를 확인하는 것을 의미합니다. (기타 상태는 삭제, 변경되었습니다)

조건이 true이면 장치가 인식되고 이벤트: 추가됨 -> RUN systemd-mount
$devnode ... 장치 경로로 확장되고 udev는 장치(/dev/...)로 설정됩니다.

장치는 다음 위치에 설치됩니다./내/마운트/디렉토리/, 확실히 존재합니다!
udev 규칙의 전체 구문은 다음과 같습니다.https://www.linux.org/docs/man7/udev.html

  1. udev 규칙 다시 로드
    sudo udevadm control --reload-rules

  2. USB 드라이브를 분리했다가 연결하여 작동하는지 확인할 준비가 되었습니다!

추가로 공급업체 ID와 제품 ID로 장치를 식별할 수 있지만 udev 데이터베이스에서 자세히 살펴봐야 합니다.
udevadm info --attribute-walk /dev/sdf1
하위 시스템 == "usb"에서 찾았습니다.

ATTRS{idProduct}=="5406"
ATTRS{idVendor}=="0781"

udev 규칙:

ATTRS{idVendor}=="0781", ATTRS{idProduct}=="5406", ENV{ID_FS_UUID}=="3CF6-EEA5", ACTION=="add", RUN{program}+="/usr/bin/systemd-mount --no-block --collect $devnode /my/mount/directory/"

관련 정보