我已经读到可以使用“懒惰”选项“卸载”原本很忙的磁盘。联机帮助页对此有说明:
umount - 卸载文件系统
-l 懒惰卸载。立即从文件系统层次结构中分离文件系统,并在文件系统不再忙碌时立即清除对文件系统的所有引用。此选项允许卸载“繁忙”的文件系统。(需要内核 2.4.11 或更高版本。)
但这有什么意义呢?我考虑了为什么我们完全卸载分区:
在这两种情况中的任何一种情况下,恕我直言,所有“懒惰”卸载都是为了更难确定磁盘是否真的已卸载,并且您实际上可以继续执行这些操作。唯一的应用umount -l
似乎是让没有经验的用户“感觉”他们已经实现了他们没有实现的目标。
为什么要使用惰性卸载?
我有一个 sshfs FUSE 文件系统安装在~/mountpoint
. 我试过umount mountpoint
和diskutil unmount mountpoint
(在 Mac 上),但都失败了。我用过sshfs -o IdentityFile=<key> user@hostname:/home/<user> ~/mountpoint
; 这些都不需要sudo。
那么,为什么要卸载它,我需要 sudo 权限吗?
如何在不调查 Linux 忙的情况下卸载 Linux 中的文件系统?
我想在一个命令中完成。它应该处理使用该文件系统、子挂载、容器 ( lxc-execute -n qqq <command>
) 和所有其他东西的应用程序。
只是“卸载。没有异议!”。允许特殊的内核补丁或配置。
文件系统应该真正卸载,所以umount -l
肯定不是一个选项。例如,for cryptsetup remove
(BTW how to force force cryptsetup remove
? Update: cryptsetup luksSuspend
,但cryptsetup luksResume
如果不是 LUKS 就不行)。
如何使该文件系统上的所有文件句柄无效?
我知道的唯一可靠的方法是通过 FUSE 挂载文件系统(卸载 FUSE 通常没有问题,因为我可以终止它的进程)。
PS已经知道安装fuser
,lsof | grep
,cat /proc/*/mounts | grep
和过时的非工作“badfs补丁”。
在 AWS EC2 实例中,我们有多个 EBS 卷。当我尝试分离其中任何一个时,该umount
命令有效,但无法分离设备。
# grep -c xvdj /proc/mounts
0
Run Code Online (Sandbox Code Playgroud)
但是,lsof
报告jbd2
正在使用该设备。
# lsof | grep xvdj
jbd2/xvdj 2896 root cwd DIR 202,1 4096 2 /
jbd2/xvdj 2896 root rtd DIR 202,1 4096 2 /
jbd2/xvdj 2896 root txt unknown /proc/2896/exe
# ps u -p 2896
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 2896 0.0 0.0 0 0 ? S Jul20 0:02 [jbd2/xvdj-8]
Run Code Online (Sandbox Code Playgroud)
如何停止此过程,以便释放设备?
我正在尝试使用 zerofree,这似乎是这个问题的答案:How to reduce VM size?
我已经成功卸载了 /dev/sda1,并且 zerofree 工作正常,释放了 ~37gb。
但我似乎无法卸载或重新挂载为只读 /dev/mapper/mypc-root,它说:
umount: / is busy
Run Code Online (Sandbox Code Playgroud)
或者
mount: / is busy
Run Code Online (Sandbox Code Playgroud)
使用的命令是:
$ umount /dev/mapper/mypc-root
$ mount -no remount,ro -t ext2 /dev/mapper/mypc-root /
Run Code Online (Sandbox Code Playgroud)
我处于单用户模式,使用“init 1”输入。
来宾 SO 是 Ubuntu 12,带有加密的 LVM 和 home。
有任何想法吗?
我有一个/dev/sdf
安装到/mnt/db
并意外地再次安装到 /mnt/db2 (我打算安装/dev/sdh
)。
有什么方法可以卸载/dev/sdf
但仅适用于第二个安装?该/mnt/db
含有活的数据库,所以我宁愿没有任何停机时间。
我最近为 USB 记忆棒添加了一行/etc/fstab
,以便能够自动安装它,使用 UUID 来识别设备。
在我已经有几个外部 ext4 驱动器之前,它们的 UUID 以小写十六进制字符编写,[0-9a-f]
如下所示:
UUID=3eeaaa43-dead-beef-cafe-243bcaaad475 /media/external_2TB ext4 rw,user,noexec,nosuid,nodev,noatime 0 2
Run Code Online (Sandbox Code Playgroud)
我检查了 UUID 的 UUID blkid
,得到一个大写的十六进制 UUID 并/etc/fstab
以与 ext4 行相同的方式输入它,以小写十六进制,如下所示:
UUID=125c-a3eb /media/usb_8GB vfat defaults,users,umask=0 0 0
mount: special device UUID=125c-a3eb does not exist
Run Code Online (Sandbox Code Playgroud)
然后我想到了用大写字母(gU3w在 Vim 中)尝试它的想法,并且它没有问题。为了确认这一点,我卸载了 UUID,并将 UUID 改回小写,挂载失败,然后又改回大写,并成功挂载。
据我了解,UUID 是一个十六进制数,而不是一个字符串,所以字母的大小写应该无关紧要。但显然不是。RFC4122将 UUID 定义为“输入时不区分大小写”。有什么我遗漏的还是这个mount
/umount
行为是一个错误?
如果重要的话,我正在使用带有自定义内核版本 3.6.8 的 Debian GNU/Linux 7.0 Wheezy。
在 AWS 中运行 CentOS 6,我所看到的让我感到困惑。
有一个s3fs
挂载/etc/fstab
有时会失去读取和写入的能力。我有一个运行了好几个月的 cron 工作,它会简单地每分钟测试安装是否良好,如果它失去了连接,它只会umount
和mount
共享。在无负载下,安装座往往会更频繁地消失,然后在实际负载下,所以这是一个很好的解决方案。
出于某种原因,这个停止工作,而现在的机器上来无法从共享的读/写,因为机器设置之后做引导时的第一件事就是umount
和mount
共享。
现在我在尝试阅读时遇到的错误是:
cp: cannot open `/app/canary.txt' for reading: Input/output error
Run Code Online (Sandbox Code Playgroud)
在/var/log/messages
我看到这个:
kernel: s3fs[3077]: segfault at e66000 ip 00007f833663d94e sp 00007ffc849c5b18
error 4 in libc-2.12.so[7f83365b4000+18a000]
Run Code Online (Sandbox Code Playgroud)
现在,当我以 root 身份在控制台中运行完全相同的脚本时,它可以完美运行。卸载和安装驱动器并使其处于工作状态。
我的第一个猜测是环境中的某些东西导致了差异,所以我source /root/.bash_profile
在我的脚本中添加了一个,但无济于事。
/etc/fstab 中的行是一个怪物,但经过多次微调尝试后,我们发现这是最有效的:
ourbucket /app fuse.s3fs _netdev,allow_other,endpoint=us-west-2,url=https://s3-us-west-2.amazonaws.com,use_path_request_style,use_sse,gid=1001,umask=0007,use_cache=/srv/s3fs,retries=20,parallel_count=30,connect_timeout=30,readwrite_timeout=60,stat_cache_expire=86400,max_stat_cache_size=100000 0 0
Run Code Online (Sandbox Code Playgroud)
这是 cronfile 的样子:
* * * * * root /usr/bin/sudo /root/check_mount.sh
Run Code Online (Sandbox Code Playgroud)
我在有和没有 sudo 的情况下都尝试过,因为我认为它可能会影响环境。
我已经尝试了该脚本的许多变体,但是这些命令中的大多数都曾在某个时间点使用过。无论umount
我做什么类型,都会出现同样的问题。
\cp /app/canary.txt …
Run Code Online (Sandbox Code Playgroud) 是否有更正确的方法来卸载设备/文件系统/等?我应该卸载最初安装的设备还是安装点?
mount /dev/sda1 /mnt/myusbstick
do stuff
umount /mnt/myusbstick
Run Code Online (Sandbox Code Playgroud)
或者
umount /dev/sda1
Run Code Online (Sandbox Code Playgroud) 我的 Linux 安装分区时不时地变为只读。由于计算机是笔记本电脑,我认为这是由于一些剧烈运动引起的一些书写错误。
分区挂载为:
UUID=34h3k4hdf ... / ext4 errors=remount-ro 0 1
Run Code Online (Sandbox Code Playgroud)
如何在不重新启动系统或卸载并重新安装分区的情况下再次使其成为 rw ?
我的磁盘位置如下所示:
# df -HP
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 256G 177G 67G 73% /
/dev/sda1 510M 18M 467M 4% /boot
tmpfs 8.5G 0 8.5G 0% /dev/shm
//10.10.10.10/softwares/shared_by_shantanu/abc/ 2.0T 865G 1.2T 44% /mnt/windowsabc
//10.10.10.10/softwares/shared_by_shantanu/abc/ 2.0T 865G 1.2T 44% /windosabc1
//10.10.10.10/abc/ 2.0T 865G 1.2T 44% /mnt/windowsabc1
Run Code Online (Sandbox Code Playgroud)
我想知道如何卸载“shared_by_shantanu”设置,因为它现在已经过时了。