我有一台没有内置硬盘的笔记本电脑。为了充分利用它,我考虑将根分区放在外部介质上,通过 USB。我看不出这有什么不可行的原因,但我想知道如果我意外断开并重新连接 USB 会发生什么。
显然,一般情况下可以自动重新连接设备,但如果根分区断开连接,这仍然可行吗?我很确定,如果根分区消失,正在运行的系统不会立即死机,但如果重新安装变得不可能,我也不会感到惊讶。
我有一台没有内置硬盘的笔记本电脑。为了充分利用它,我考虑将根分区放在外部介质上,通过 USB。我看不出这有什么不可行的原因,但我想知道如果我意外断开并重新连接 USB 会发生什么。
显然,一般情况下可以自动重新连接设备,但如果根分区断开连接,这仍然可行吗?我很确定,如果根分区消失,正在运行的系统不会立即死机,但如果重新安装变得不可能,我也不会感到惊讶。
我希望所有用户都从 NFS 服务器自动挂载,除了少数应使用本地主文件夹的帐户。因此,每台客户端计算机(和 nfs 服务器)在 /home 中都有一些文件夹,其余文件夹也从 nfs 服务器挂载到 /home。有没有办法实现这一点?
据我了解,autofs 基本上会将挂载置于 /home 之上,从而掩盖“真实”/home 中的任何内容。因此,我需要将本地文件夹移出并放在其他地方(即 /export),然后执行绑定挂载。我还可以在真实的 /home 中创建一个符号链接,这样如果 autofs 发生故障,我就可以得到保障。(我知道另一种解决方法是挂载到 /home 以外的其他地方,但由于一些遗留软件问题,所有主文件夹都位于 /home 中非常重要)
自动主控
...
/- auto.local
/home auto.home
汽车之家
* -fstype=nfs,rw,sync nfs-server:/home/&
汽车之家
/home/local -fstype=bind :/export/local
不幸的是,这不起作用。我收到错误:
do_mount_autofs_direct: failed to create ioctl fd for /home/local
我发现这是因为我有一个指向 /export/local 的 /home/local 符号链接。我不确定这为什么会导致问题。删除它后,它仍然会给我一个错误:
handle_packet_missing_direct: failed to create ioctl fd for /home/local
作为一项健全性检查,我确实确认手动执行绑定挂载确实成功。
我很感激任何建议。我想另一种解决方法是以某种方式设置,以便每次 autofs 启动时都会创建一个符号链接。不知道该怎么做
我在旧系统 ubuntu 18 上。autofs 版本是 5.1.2。
我发现唯一能做到这一点的方法是为所有用户创建直接挂载。但是每次添加或删除用户时都必须更新它,这并不理想。
在对 systemd 单元进行了一些研究后,我发现了两种不同的挂载单元:the.mount
和.automount
. 起初,对我来说,该automount
装置会自动安装一个似乎是合乎逻辑的mount
。但是,事实证明,当您启用安装单元时:
systemctl enable media-mydisk.mount
它将在启动时自动挂载。我对 systemd 有点陌生,但这已经困扰了我很长一段时间了。我还在最后发布了该单元的代码。
automount
所以,我的主要问题是:如果一个人可以启用一个mount
单元,为什么还需要s?
media-mydisk.mount
如果这有什么不同的话,这是我的:
[Unit]
Description=My disk
[Mount]
What=/dev/sdb1
Where=/media/mydisk
Type=ext4
Options=defaults
[Install]
WantedBy=multi-user.target
我在网上搜索过,但找不到使用 an.automount
和简单启用 a之间的任何比较.mount
我的/etc/fstab
文件如下:
proc /proc proc defaults 0 0
/dev/root / ext4 rw,errors=remount-ro 0 1
tmpfs /dev/shm tmpfs mode=0777 0 0
tmpfs /tmp tmpfs mode=1777,size=128M 0 0
tmpfs /run tmpfs mode=0755,nosuid,nodev 0 0
sysfs /sys sysfs defaults 0 0
# Add swap
#/dev/MyVolGroup/swap none swap sw 0 0
/dev/mapper/MyVolGroup-data /mnt/data ext4 defaults 0 0
但是最后一个设备不会在启动时安装说
等待设备 /dev/mapper/MyVolGroup-data 超时
但是一旦系统启动,我就mount -a
可以正常安装
交换也一样。
我尝试添加_netdev
选项,然后它尝试稍后安装但仍然无法安装。
我怎样才能让这两个在启动时挂载?
pvs
输出:
root@wdmc:~# pvs
PV VG Fmt Attr PSize PFree
/dev/dm-0 MyVolGroup lvm2 a-- <3.64t 3.63t
blkid
输出:
root@wdmc:~# blkid
/dev/mtdblock5: UUID="2038344949" TYPE="ubi"
/dev/mtdblock6: UUID="3233018442" TYPE="ubi"
/dev/mtdblock7: UUID="1869220897" TYPE="ubi"
/dev/md0: UUID="0dea8221-e8b4-49b3-9599-df5b5b15dba7" TYPE="crypto_LUKS"
/dev/sda: UUID="f073ddc5-796f-1ab7-5538-43e0ea150f90" UUID_SUB="94ac9e96-72b0-56e9-2b5e-940b8fd7a692" LABEL="(none):0" TYPE="linux_raid_member"
/dev/mapper/cryptroot: UUID="TmCwwm-dScT-kBwA-4HL1-W0DX-5z3R-DzoKZM" TYPE="LVM2_member"
/dev/mapper/MyVolGroup-swap: UUID="7add317b-6d28-4fce-9a35-0b3a2d989236" TYPE="swap"
/dev/mapper/MyVolGroup-root: UUID="37592b11-f46b-4c07-ae3e-1011e2d3229c" TYPE="ext4"
/dev/mapper/MyVolGroup-data: UUID="fa084115-e022-4fe4-a2d1-4785a02ab9d7" TYPE="ext4"
的手册页mount
指示:
suid Allow set-user-ID or set-group-ID bits to take effect.
nosuid Do not allow set-user-ID or set-group-ID bits to take effect.
但没有迹象表明这些选项中的一个或另一个是默认选项。
同时,我找不到任何关于我的根文件系统的suid
或状态的信息:nosuid
$ mount
,我会得到:/dev/sda2 on / type ext4 (rw,relatime,errors=remount-ro,data=ordered)
.
我在文件中看不到任何suid
或nosuid
选项/etc/fstab
。
其中/proc/mounts
仅表示:
/dev/sda2 / ext4 rw,relatime,errors=remount-ro,data=ordered 0 0
.
mkfs.ext4
我在 or 的手册页或tune2fs
文件中找不到任何内容/etc/mke2fs.conf
。所以我的问题是:
suid
或选择如何?nosuid
suid
或状态?nosuid
我的问题是 systemd automount 将我的 ntfs 文件系统安装为只读,尽管我设置了options=rw
在一些关于使用 automount 设置 systemd 的在线参考站点之后,我创建了两个文件以尝试/dev/sdb4
安装到/mnt/winblows
我已经确定了分区的PARTUUID,创建了(那是我的用户帐户)/mnt/winblows
拥有的目录,创建了两个文件:和一个对应的内容如下wurst:wurst
/etc/systemd/system/mnt-winblows.automount
mnt-winblows.mount
mnt-winblows.automount:
[Unit]
Description=Automount Winblows
[Automount]
Where=/mnt/winblows
[Install]
WantedBy=multi-user.target
mnt-winblows.mount:
[Unit]
Description=Winblows
[Mount]
What=PARTUUID=38a287b1-46ca-4cbf-b887-956804a31b2d
Where=/mnt/winblows
Type=ntfs
Options=user,rw,uid=1000,gid=1001
[Install]
WantedBy=multi-user.target
然后我执行了以下命令:
sudo systemctl daemon-reload
sudo systemctl restart mnt-winblows.automount
但是,当我触摸时,/mnt/winblows/test
我得到touch: cannot touch '/mnt/winblows/test': Read-only file system
我不确定如何纠正这个问题,因为根据 man 8 mount 选项 rw 应该解决这个问题。任何指导表示赞赏。
parted 创建新分区似乎有一个不希望的副作用,如果该分区以前存在,它将自动挂载,甚至在它被格式化之前。
这对于一个脚本来说很麻烦,例如:
parted -sm /dev/sdb mklabel gpt
parted -sm /dev/sdb mkpart primary ext4 1 1.8T
mkfs.ext4 -L drive /dev/sdb1
mkfs 在这里失败,因为分区已挂载。
在 CentOS 7 中观察到此行为,当目标磁盘自上次启动以来已被格式化并挂载时。
卸载,删除和挂载点目录中的条目/etc/fstab
,仍然触发条件;将创建挂载点并自动挂载分区。
目前尚不清楚谁创建了挂载点目录或 parted 从哪里获取信息。
在 fstab 清除和 parted 调用之间重新启动将解决此问题。parted 中没有关于自动安装的记录参数。
那么这种行为对于 parted 来说是否正常,是否有可靠的方法来防止它自动安装?
出于某种原因,systemd 在尝试挂载我的一个 cryptsetup 设备时会超时。以下是单位和脚本:
udev 规则:
ACTION=="add", KERNEL=="sd[a-z][0-9]", ATTRS{serial}=="NA8F9WKF", SYMLINK+="BigHDD", TAG+="systemd"
ACTION=="add", KERNEL=="sd[a-z][0-9]", ATTRS{serial}=="AA00000000065396", SYMLINK+="clavem", TAG+="systemd"
ACTION=="add", KERNEL=="sd[a-z][0-9]", ATTRS{wwid}=="t10.ATA WDC WD10EZRZ-00Z5HB0 WD-WCC4M6HRPV4V", SYMLINK+="HDDsB", TAG+="systemd"
ACTION=="add", KERNEL=="sd[a-z][0-9]", ATTRS{wwid}=="t10.ATA WDC WD10EZRZ-00Z5HB0 WD-WCC4M3EYESNV", SYMLINK+="HDDsC", TAG+="systemd"
mnt-HDDs.automount
[Unit]
Description=Automount HDDs
Requires=dev-clavem.device
[Automount]
Where=/mnt/HDDs
[Install]
WantedBy=multi-user.target
mnt-HDDs.mount:
[Unit]
BindsTo=HDDs-unlock.service dev-clavem.device media-clavem.mount
After=HDDs-unlock.service dev-HDDsB.device dev-HDDsC.device
[Mount]
What=/dev/mapper/cryptHDDC
Where=/mnt/HDDs
Type=btrfs
Options= noatime,compress=lzo,autodefrag
硬盘解锁服务:
[Unit]
Description=HDDs unlock
BindsTo=mnt-HDDs.mount dev-clavem.device dev-HDDsB.device dev-HDDsC.device
Requires=media-clavem.mount dev-HDDsB.device dev-HDDsC.device
After=media-clavem.mount dev-HDDsB.device dev-HDDsC.device
[Service]
Type=oneshot
RemainAfterExit=yes
KillMode=none
ExecStart=/home/rbenedetti/teste.sh
ExecStop=/sbin/cryptsetup luksClose cryptHDDB ; /sbin/cryptsetup luksClose
cryptHDDC
[Install]
RequiredBy=mnt-HDDs.mount
测试.sh
#!/bin/bash
i=0
while [[ ! -b /dev/disk/by-uuid/42e7eacf-5e09-4476-8dbc-1919675c1595 ]]; do
echo "cant find /dev/disk/by-uuid/42e7eacf-5e09-4476-8dbc-1919675c1595... waiting. $i" > ~/testLog
if [[ "$counter" -gt 10 ]]; then
echo "giving up." > ~/testLog
exit 1
fi
sleep 0.5
let i++
done
i=0
while [[ ! -b /dev/disk/by-uuid/826b9963-eb49-4eac-a9c0-e741552491d4 ]]; do
echo "cant find /dev/disk/by-uuid/826b9963-eb49-4eac-a9c0-e741552491d4... waiting. $i" > ~/testLog
if [[ "$counter" -gt 10 ]]; then
echo "giving up." > ~/testLog
exit 1
fi
sleep 0.5
let i++
done
/sbin/cryptsetup --key-file /media/clavem/k luksOpen /dev/disk/by-uuid/42e7eacf-5e09-4476-8dbc-1919675c1595 cryptHDDC
/sbin/cryptsetup --key-file /media/clavem/k luksOpen /dev/disk/by-uuid/826b9963-eb49-4eac-a9c0-e741552491d4 cryptHDDB
i=0
while [[ ! -b /dev/mapper/cryptHDDB ]]; do
echo "cant find /dev/mapper/cryptHDDB... waiting. $i" > ~/testLog
/sbin/cryptsetup --key-file /media/clavem/k luksOpen /dev/disk/by-uuid/826b9963-eb49-4eac-a9c0-e741552491d4 cryptHDDB
if [[ "$counter" -gt 10 ]]; then
echo "giving up." > ~/testLog
exit 1
fi
sleep 0.5
let i++
done
i=0
while [[ ! -b /dev/mapper/cryptHDDC ]]; do
echo "cant find /dev/mapper/cryptHDDC... waiting. $i" > ~/testLog
/sbin/cryptsetup --key-file /media/clavem/k luksOpen /dev/disk/by-uuid/42e7eacf-5e09-4476-8dbc-1919675c1595 cryptHDDC
if [[ "$counter" -gt 10 ]]; then
echo "giving up." > ~/testLog
exit 1
fi
sleep 0.5
let i++
done
echo "somehow passed...>" > ~/testLog
teste.sh 大部分都是测试,因为我试图弄清楚为什么会在 oneshot 服务中发生超时。出于某种原因systemctl restart mnt-HDDs.mount
,它运行良好并挂载了我的分区......它给出了超时mnt-mapper-cryptHDDC.device
我已经设置了几个文件夹在启动时挂载到 fstab 中。这工作正常。
但是,我希望能够在某些情况下绕过安装过程。通常,当我知道远程文件夹不可用时。
有没有办法在启动时绕过自动安装过程?
我感谢你的帮助。