USB Thumbdrive 자동 설치에 대해 알아보고 직접 수행해 보세요.

USB Thumbdrive 자동 설치에 대해 알아보고 직접 수행해 보세요.

두 개의 하위 구성요소로 나눌 수 있습니다.

  1. 이 자동 설치 프로그램이 자체 마운트 지점을 생성(및 삭제)하는 이유는 무엇입니까?

  2. 이 작업을 직접 수행할 때 자체 마운트 지점을 수동으로 생성해야 하는 이유는 무엇입니까(또는 이 작업을 자동으로 수행하는 방법으로 어떻게 이동합니까?)

USB 플래시 드라이브를 시스템에 삽입할 때 발생하는 정확한 프로세스를 모르겠습니다. 많은 일이 일어나는 걸 보니...

예를 들어 기존 USB2 1GB 메모리 스틱을 삽입하는 경우:

[76187.152010] usb 3-6: new high-speed USB device number 18 using ehci-pci
[76187.285314] usb 3-6: New USB device found, idVendor=1221, idProduct=3234
[76187.285317] usb 3-6: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[76187.285319] usb 3-6: Product: Flash Disk
[76187.285321] usb 3-6: Manufacturer: USB2.0
[76187.285323] usb 3-6: SerialNumber: 100000000000099E
[76187.285627] usb-storage 3-6:1.0: USB Mass Storage device detected
[76187.285704] scsi host27: usb-storage 3-6:1.0
[76188.285460] scsi 27:0:0:0: Direct-Access     USB2.0   Flash Disk       2.60 PQ: 0 ANSI: 2
[76188.285731] sd 27:0:0:0: Attached scsi generic sg11 type 0
[76188.286201] sd 27:0:0:0: [sdk] 2048000 512-byte logical blocks: (1.04 GB/1000 MiB)
[76188.291250] sd 27:0:0:0: [sdk] Write Protect is off
[76188.291255] sd 27:0:0:0: [sdk] Mode Sense: 0b 00 00 08
[76188.292333] sd 27:0:0:0: [sdk] No Caching mode page found
[76188.292337] sd 27:0:0:0: [sdk] Assuming drive cache: write through
[76188.296951]  sdk: sdk1
[76188.300321] sd 27:0:0:0: [sdk] Attached SCSI removable disk

그리고 다음과 같이 설치됩니다.

/dev/sdk1 on /media/madivad/5859-77E7 type vfat (rw,nosuid,nodev,uid=1000,gid=1000,shortname=mixed,dmask=0077,utf8=1,showexec,flush,uhelper=udisks2)

마운트 프로세스에 대한 디렉토리를 생성(그런 다음 삭제)하는 자동 마운트 프로세스에 뭔가가 있습니까?

mount프로세스의 일부로 직접 생성하고 삭제하기 위해 명령줄에서 무언가를 식별 할 수 있습니까 umount?

이것은 일반적으로 스크립트를 자동 생성하여 mount처음 생성된 내용을 기억한 다음 umount디렉터리의 내용을 삭제하는 것입니까?

제 생각에 저를 짜증나게 하는 이 프로세스의 일부는 특히 제가 테스트할 때 삭제하는 것을 잊어버린 디렉토리가 생긴다는 것입니다.

내가 원하는 것을 설치할 때 (예를 들어):

sudo mount /dev/sdk1 /mnt/usbkey1g

마운트 지점이 생성되거나 사용 중이면 경고가 표시되지만, 더 중요한 것은 마운트 지점이 존재하지 않는 경우 즉시 생성한다는 것입니다. 이번에도 umount열쇠를 받았을 때 떼어냈습니다.

Ubuntu 14.04 LTS의 데스크톱 및 서버 버전을 모두 설치했습니다.

나는 AU가 아닌 여기서 이 질문을 하는 것입니다. 주로 이 질문을 실제 운영 체제와 관련이 없고 일반적으로 Linux와 관련하여 묻는 것이기 때문입니다. 그러나 그것은 나에게 효과적입니다. AU가 더 적합하다면 자유롭게 AU로 마이그레이션하세요.

건배.

답변1

간단히 말해서 Ubuntu에서 일어나는 일은 udisksctludev 규칙이 호출되고 장치가 사용자로 media 폴더에 마운트된다는 것입니다 /media/$USER/diskname.

모든 실제적인 목적을 위해서는 udisksctl mount -b /dev/sdb1을 수동으로 실행하는 것으로 충분합니다.

장치를 실제 이름으로 바꾸십시오.

귀하의 질문에서 교차 배포판 솔루션도 요구하고 있으므로 가장 좋은 솔루션은 command 이지만 mount아래는 udisksctl기본적으로 명령을 에뮬레이트하는 스크립트입니다. 동적으로 설치된 디렉토리를 생성하고 , 및 명령을 사용할 수 있는 한 모든 배포판 blkid에서 mount작동 합니다 awk.

소스 코드를 저장 mountStuff.sh하고 실행 가능하게 만듭니다 chmod +x /path/to/mountStuff.sh. 전체 경로에서 스크립트를 지속적으로 실행하지 않으려면 $PATH변수 디렉터리 에 저장하는 것이 좋습니다.

다음과 같이 실행합니다:

skolodya@ubuntu:$ sudo ./mountStuff.sh /dev/sdb5                               
[sudo] password for xieerqi: 
Mounted /dev/sdb5 at /media/xieerqi/0ca7543a-5463-4a07-8bbe-233a7b0bd625
#!/usr/bin/env bash
# Author: Serg Kolo
# Date: January 23, 2016
# Script Description: Helper script that
# emulates behavior of udisksctl; reads blkid
# and creates a directory where to mount, based
# on disk label or uuid
#
#
# Copyright Sergiy Kolodyazhnyy 2016
#
# Permission to use, copy, modify, and distribute this software is hereby granted 
# without fee, provided that  the copyright notice above and this permission statement
# appear in all copies.
# 
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL 
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
# DEALINGS IN THE SOFTWARE.
if [ "$(id -u)" -ne 0  ];then
   printf ">>> ERR:Must be root"
   exit 1 
fi

if [ -z "$1"  ]; then
     printf ">>> ERR: Must have a parameter, e.g. /dev/sdb1"
     exit 1
fi

if [ "${1%/*}" != "/dev"   ];then
   printf ">>> ERR: Wrong parameter; Must be a device file"
   exit 1
fi

# split output of blkid into array;
# Element 0 is device, element 1 is LABEL or UUID, element 2 is filesystem 
  ARRAY=($( blkid | awk -v DEV="$1"  '$0~DEV{ gsub(/\"/,"");gsub(/\=/," "); print $1,$3,$NF  }'  ))
# the username who ran script as sudo given in $SUDO_USER
if [ ! -d "/media/$SUDO_USER/${ARRAY[1]}" ];
then
  mkdir "/media/$SUDO_USER/${ARRAY[1]}"
fi

mount -t "${ARRAY[2]}" -o rw,user "$1" "/media/$SUDO_USER/${ARRAY[1]}"

if [ "$?" -eq  "0"  ]; then
   printf "Mounted %s at %s" "$1" "/media/$SUDO_USER/${ARRAY[1]}"
fi

skolodya@ubuntu:$ sudo ./mountStuff.sh /dev/sdb5                               
[sudo] password for xieerqi: 
Mounted /dev/sdb5 at /media/xieerqi/0ca7543a-5463-4a07-8bbe-233a7b0bd625

관련 정보