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で何が起こるのかは、udisksctl
udevルールが呼び出され、デバイスがユーザーとしてmediaフォルダにマウントされることです/media/$USER/diskname
。
すべての実用的な目的のために、 udisksctl mount -b /dev/sdb1 を手動で実行すれば十分です。
デバイスを実際の名前に変更します。
あなたの質問でクロスディストリビューションソリューションも必要としているので、最良のソリューションはコマンドですが、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