我有一个USB密钥,每天都会通过bash脚本将其用于保存数据。我设法为特定用户安装了它,以便能够使用以下命令在其中写入文件夹:
mount /dev/sdc1 /media/usb -o rw,uid=sysop,gid=sysop
该脚本可以根据需要运行和创建目录,并且非常完美。在某个时候,将拔出USB密钥并用新的(相同型号)替换。新的USB密钥仍会使用该名称/dev/sdc1
还是会有所不同?
如果是不同的零件,如何将安装零件包括在脚本中以使其自动制成?
我有一个USB密钥,每天都会通过bash脚本将其用于保存数据。我设法为特定用户安装了它,以便能够使用以下命令在其中写入文件夹:
mount /dev/sdc1 /media/usb -o rw,uid=sysop,gid=sysop
该脚本可以根据需要运行和创建目录,并且非常完美。在某个时候,将拔出USB密钥并用新的(相同型号)替换。新的USB密钥仍会使用该名称/dev/sdc1
还是会有所不同?
如果是不同的零件,如何将安装零件包括在脚本中以使其自动制成?
Answers:
虽然通过进行访问/dev/sdXy
存在风险,但可以通过进行更准确的标识UUID
。
由于您提到(有时)要更改USB记忆棒,以保持兼容性,因此您可能希望通过标签来标识USB记忆棒。要做到这一点,您可以:/dev/disk/by-label/YourLabelHere
。
请注意,您需要在运行脚本之前将标签设置为新的USB记忆棒,并且/dev/disk/by-label
仅在(至少)一个USB记忆棒已连接(否则将其移除)时该标签才可用。
有关如何设置USB标签的详细信息,请参见以下网址:https : //askubuntu.com/questions/194510/how-to-edit-label-of-usb-drive
/dev/disk/by-id/
可能会有用(这是我在文件系统中使用的标签)。
这就是我解决此问题的方法,但是通常正如Sato Katsura告诉您的那样,您需要编写udev规则。
udevadm info --query all /dev/sdc
(或其他)。设置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",
在udev规则行上为1号分区。
/etc/udev/rules.d
如果您拥有健全的系统,则可以在中找到udev规则。
现在你可以
udevadm control --reload
重新加载规则并
udevadm monitor
监视步骤5中发生的情况。
插入并插入USB设备(当然,在卸载之后,如果已安装,则要先插入)。初始化后,显示器应通知您有关新设备的信息。
检查是否/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
现在,您可以使用符号链接/dev/pocketbook
和定义持久性规则/dev/pocketbook-sd
,或者在udev规则文件的SYMLINK字段中定义任何名称。
只是添加到@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
}