在serverfault 上被问到但没有得到足够的关注,所以在这里重新发布,希望这里的一些人知道答案。
还有另一个问题在讨论卸载 rbind 挂载,但该解决方案有不良影响。考虑以下目录布局:
.
??? A_dir
? ??? mount_b
??? B_dir
? ??? mount_c
??? C_dir
Run Code Online (Sandbox Code Playgroud)
现在我绑定C_dir到B_dir/mount_c和 rbindB_dir到A_dir/mount_b:
[hidden]$ sudo mount --bind C_dir B_dir/mount_c
[hidden]$ sudo mount --rbind B_dir A_dir/mount_b
[hidden]$ mount | grep _dir | wc -l
3
Run Code Online (Sandbox Code Playgroud)
现在umount A_dir/mount_b会失败,这并不奇怪。根据网络上随处可见的答案,我们需要umount A_dir/mount_b/mount_c先然后umount A_dir/mount_b。但是,umount A_dir/mount_b/mount_c也会 unmount B_dir/mount_c,这是不需要的:
[hidden]$ sudo umount A_dir/mount_b/mount_c
[hidden]$ mount | grep _dir | wc …Run Code Online (Sandbox Code Playgroud) 有时,Linux 内核不知道外部 USB 存储设备的驱动器写入缓存。在这种情况下是否有必要在分离这些设备之前显式刷新这些缓存?
我使用 WD Elements 外置 USB 硬盘,上面hdparm -I写着
...
Commands/features:
Enabled Supported:
...
* Write cache
...
Run Code Online (Sandbox Code Playgroud)
和hdparm -W:
...
write-caching = 1 (on)
Run Code Online (Sandbox Code Playgroud)
另一方面,当我插入驱动器时,我收到以下内核消息:
... No Caching mode page found
... Assuming drive cache: write through
Run Code Online (Sandbox Code Playgroud)
根据Kyle Jones 的这个回答,这些内核消息表明内核假设它的写操作将直接进入盘片。
Linux 内核文档中的文件Documentation/block/queue-sysfs.txt 的“write_cache (RW)”部分描述了内核假设通过缓存写入模式的含义(感谢Wayne Conrad):
...“直写”,...还将消除内核发出的缓存刷新。
到目前为止,我从 Linux 系统分离外部 USB 存储设备的标准方法是卸载它上所有已安装的分区,等到驱动器的 LED 停止闪烁,物理拔下 USB 连接器,如果这不会关闭电源设备(有些具有单独的电源),以明确关闭电源。
这种方法是否安全,或者它是否意味着在驱动器写入缓存中丢失未刷新数据的风险,特别是如果内核不知道该缓存?
在后一种情况下,似乎建议在卸载后通过发送 SCSI 同步命令显式刷新驱动器上的写入缓存。例如sg_sync,可以使用 sg3-utils 附带的 which来完成: …
我正在尝试运行fsck -p /dev/sda5以修复 ext4 分区上的错误,但是命令输出
fsck from util-linux-ng 2.17.2
fsck.ext4: Device or resource busy while trying to open /dev/sda5
Filesystem mounted or opened exclusively by another program?
Run Code Online (Sandbox Code Playgroud)
我已经确认使用/etc/mtab并且lsof没有使用该分区并且它没有安装。我也曾经fuser -k /dev/sda5使用该文件强行关闭任何东西,并umount试图卸载它无济于事。
fsck尽管分区读起来很忙,但我如何强制至少检查并希望修复它?假设我有足够的信心它既没有安装也没有使用,并且数据损坏的可能性不是问题。
所有命令都以 root 身份从 Ubuntu 10.04 32 位 liveCD 执行。该分区是 Ubuntu 10.04 32 位安装的系统(非家庭)部分。
操作系统:RHEL8 文件系统:xfs
我猜测某个僵尸进程正在占用该空间,但我找不到它。
问题在于/var/lib/pgsql/14,它df表示正在使用 1.1TB 的空间:
$ sudo df -T -xtmpfs -xdevtmpfs -h --sync
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda2 xfs 126G 14G 113G 11% /
/dev/sda1 xfs 2.0G 658M 1.4G 33% /boot
/dev/mapper/pgsql14vg-pgsql141v xfs 5.4T 1.1T 4.4T 20% /var/lib/pgsql/14
/dev/mapper/pglogvg-pglog1v xfs 15G 292M 15G 2% /var/log/postgresql
FISPFILNAS01.xxxxxxxxxxxx:/DB_backups_TAPb nfs4 15T 2.3T 13T 16% /var/lib/pgsql/14/backups
Run Code Online (Sandbox Code Playgroud)
然而,du说它只有 12GB 的文件:
$ du -x -d2 -h /var/lib/pgsql/14 | sort -k2
12G /var/lib/pgsql/14
12G /var/lib/pgsql/14/data
42M …Run Code Online (Sandbox Code Playgroud) 我已经为用户 piranha3 设置了一个加密的主目录:
root@raspberrypi:~# ecryptfs-verify -u piranha3 -h
INFO: [/home/piranha3/.ecryptfs] exists
INFO: [/home/piranha3/.ecryptfs/Private.sig] exists
INFO: [/home/piranha3/.ecryptfs/Private.sig] contains [2] signatures
INFO: [/home/piranha3/.ecryptfs/Private.mnt] exists
INFO: [/home/piranha3] is a directory
INFO: [/home/piranha3/.ecryptfs/auto-mount] Automount is set
INFO: Mount point [/home/piranha3] is the user's home
INFO: Ownership [piranha3] of mount point [/home/piranha3] is correct
INFO: Configuration valid
Run Code Online (Sandbox Code Playgroud)
但是在 piranha3 logouts 目录没有被卸载后:
root@raspberrypi:~# mount | grep ecryptfs
/home/.ecryptfs/piranha3/.Private on /home/piranha3 type ecryptfs (rw,nosuid,nodev,relatime,ecryptfs_fnek_sig=729061d7fa17b3a4,ecryptfs_sig=eb5ec4d9c13e2d74,ecryptfs_cipher=aes,ecryptfs_key_bytes=16,ecryptfs_unlink_sigs)
Run Code Online (Sandbox Code Playgroud)
lsof 输出:
lsof: WARNING: can't stat() cifs file system /media/cifs
Output information may …Run Code Online (Sandbox Code Playgroud) 我全新安装了 Debian 9.0.0。它有一个单独的 1 GB 分区,用于格式化为 ext4 的 /var。当我从终端关闭时,使用shutdown -h now,会出现一条亮红色的错误消息,指出“卸载 /var 失败”。
此错误的修复方法是什么?
我无法安装我的 USB:
$ mount /dev/sdb1 /mnt
mount: mount /dev/sdb1 on /mnt failed: File exists
Run Code Online (Sandbox Code Playgroud)
此错误的根源是什么,如何安装 USB?
分区/dev/sdb1不在/etc/fstab
对于我即将实施的一些高度安全的堡垒虚拟机,我正在考虑/boot在启动后卸载 - 当然还有其他措施。仅用于更新内核时安装。
/boot重新启动后在 systemd 系统上卸载的正确方法是什么?为了测试我只是sudo umount /boot。efi分区呢?它/boot默认安装在内部,尽管我认为/efi可以使用(我还没有尝试过)来将它们分开并在管理员方面更透明地处理。启动后可以卸载/boot/efi吗/efi?没有副作用吗?是否有一种(安全的)方法可以使用单个命令行命令卸载所有连接的 USB 设备(usb-hdds、usb-sticks)上的所有分区,包括几个加密的 luks 分区?
只应卸载 USB 设备上的分区,仅此而已!
每次我尝试挂载 NFS 共享时,我都会得到以下信息:
>> mount -t nfs gitlab-replica-storage.blah.com:/export/registry-gitlab-prod-data-vol /mnt/test
mount.nfs: Stale file handle
Run Code Online (Sandbox Code Playgroud)
问题是我无法卸载,正如它所说:
>> umount -f -l /mnt/test
umount: /mnt/test: not mounted
Run Code Online (Sandbox Code Playgroud)
我尝试检查是否有任何进程正在使用挂载点,但事实并非如此。
解决此问题的任何其他替代方法?
作为澄清:
unmounting ×10
mount ×4
linux ×3
automounting ×1
bind-mount ×1
bios ×1
boot ×1
cache ×1
command-line ×1
debian ×1
ecryptfs ×1
ext4 ×1
filesystems ×1
fsck ×1
fstab ×1
linux-kernel ×1
luks ×1
nfs ×1
partition ×1
shutdown ×1
systemd ×1
ubuntu ×1
uefi ×1
usb ×1
var ×1
xfs ×1