磁盘挂载
磁盘挂载原理
磁盘挂载的底层原理,就是一个链接文件
,指向另一个文件
将目录挂载到另一个目录
参考: https://www.cnblogs.com/xingmuxin/p/8446115.html
mount --bind
参数可以将一个目录挂载到另一个目录
# 将test1挂载到test2目录
mount --bind test1 test2
-
mount --bind
连接的两个目录的inode号码并不一样,只是被挂载目录的block被屏蔽掉,inode被重定向到挂载目录的inode(被挂载目录的inode和block依然没变)。
-
- 两个目录的对应关系存在于内存里,一旦重启挂载关系就不存在了。
挂载磁盘(Linux分区挂载)
格式化前
是分区
,格式化后
是文件系统
.正确的描述应该是挂载文件系统
.
# 原生的文件系统格式直接使用mount 分区路径 挂载点路径
mount 分区路径 挂载点(要挂载到哪个目录)
# 非原生的文件系统格式,挂载时需要加上文件系统格式
mount fstype 分区路径 挂载点
查看挂载记录
# 查看/dev/sr0的挂载记录
mount |grep /dev/sr0
查看是否挂载成功
# 查看分区挂载信息
df -Th
## -T 显示文件系统的类型
## -h 显示人类易读的内容
查看inode节点的使用情况
inode节点满了之后,磁盘空间还有,但就是创建不了文件
# 查看inode节点的使用情况
df -iTh
xfs挂载重复UUID
xf
s不能同时挂载重复的UUID
。
## -o ro 以只读模式挂载
# --nouuid 不检查uuid
mount -o ro,nouuid /dev/vgo/log-snapshot /mnt/snap
查看分区的文件系统格式
https://www.linuxcool.com/blkid
# 查看分区的uuid和文件系统格式
blkid
https://www.linuxcool.com/lsblk
# 查看磁盘分区的文件系统
## -f 显示文件系统信息
lsblk -f
# 或
ls -l /dev/disk/by-uuid/
卸载(取消挂载)磁盘
umount 磁盘设备
# 或者
umount 挂载点(当前挂载的目录)
# 卸载时 只需要 一个参数即可,设备或挂载点 都可以
强制卸载(取消挂载)磁盘
## -l 使用"lazy"模式卸载,正在占用挂载点会强制进行卸载
umount 挂载点 -l
卸载挂载点失败,查找谁在占用挂载点
umount 设备
## 有时候会卸载失败,想找到原因
安装fuser命令
# 安装fuser命令
yum install psmisc -y
查看谁在占用挂载点
可以查看到占用挂载点的pid
# 查看谁在占用挂载点
## -m 显示挂载点
## -u 显示用户
## -v 显示详情
fuser -muv /mnt
## 回显
/mnt: 10584c
结束占用的pid
# 结束占用的pid
kill -9 $pid
# 识别和终止正在访问指定文件或文件系统的进程
## -m:指定匹配模式为挂载点,只管挂载点相关的进程
## -v:显示详细信息,包括进程的命令行参数
## -i:交互式模式,要求在终止进程之前进行确认
## -k:终止进程
fuser -m -v -i -k /mnt
强制卸载挂载点
# -f参数强制卸载
umount -f /data1/img
/etc/fstab持久挂载
在fstab
中配置信息,重启依然会自动挂载分区。
/etc/fstab
详解
https://blog.51cto.com/lspgyy/1297432
将挂载信息写入这个文件,挂载信息就会永久生效。
/etc/fstab
字段详解,配置格式如下:
设备路径 | 挂载点 | 文件系统格式 | 权限 | 是否自动备份 | 是否自动校验 |
---|---|---|---|---|---|
fs spec | fs file | fs vfstype | fs mntops | fs freq | fs passno |
磁盘路径 或 磁盘UUID 或磁盘LABEL | 挂载点 | ext4等,可以是auto | 一般是默认值 | 1或0(0会快一点) | 1或0(0会快一点) |
/dev/sdb4 | /media/test | xfs | defaults | 0 | 0 |
字段
具体说明:
fs spec
:分区定位,可以给UUID或LABEL,例如:UUID=6E9ADAC29ADA85CD或LABEL=softwarefs file
:具体挂载点的位置,例如:/datafs vfstype
:挂载磁盘类型,Linux分区一般为ext4 | xfs,Windows分区一般为NTFSfs mntops
:挂载参数,一般为defaults
;nofail
如果该设备不存在,则不要报告该设备的错误。nobootwait
它可以应用于非远程文件系统,以明确指示 mountall(8) 不要为它们阻止引导;- 由于“
nobootwait
”不适用于systemd
,正确的方法是使用“x-systemd.device-timeout=9
”设置一个较短的超时时间,比如 9 秒”。
- 由于“
bootwait
它可以应用于安装在 /usr 或 /var 之外的远程文件系统,没有它 mountall(8) 将无法为这些文件系统提供引导;optional
如果在启动时不知道文件系统类型,这会导致忽略该条目;和showthrough
这允许在其父安装点之前安装一个安装点(应谨慎使用后者,因为它可能导致引导挂起)。
fs freq
:磁盘检查,默认为0fs passno
:磁盘检查,默认为0,不需要检查
# 快速写入到/etc/fstab
echo "/dev/sdb4 /mnt/test xfs defaults,nofail 0 0" >> /etc/fstab
值 (Value) | 含义/解释 (Meaning/Explanation) |
---|---|
/dev/sdb4 | 要挂载的设备或分区 (Device/Partition to Mount): 指定了文件系统所在的物理位置(通常指第二个存储设备 sdb 上的第四个分区 4 )。 |
/mnt/test | 挂载点 (Mount Point): 指定文件系统挂载到哪个目录。访问 /mnt/test 目录将访问 /dev/sdb4 的内容。该目录必须预先存在。 |
xfs | 文件系统类型 (Filesystem Type): 指定 /dev/sdb4 上使用的文件系统格式(这里是 XFS)。系统需要知道这个类型才能正确读写数据。 |
defaults,nofail | 挂载选项 (Mount Options): 控制挂载行为的参数列表,用逗号分隔。 - defaults : 代表一组常用选项 (如 rw , suid , dev , exec , auto , nouser , async )。 - nofail : 如果此设备在系统启动时无法挂载(例如未连接),系统不会报错停止,而是会继续启动,忽略此挂载项。 |
0 | Dump: 用于 dump 备份工具。0 表示此文件系统不被 dump 备份。 |
0 | Fsck: 用于 fsck 文件系统检查工具在启动时的检查顺序。0 表示在系统启动时不检查此文件系统。对于 XFS、Btrfs 等现代文件系统或非 Linux 文件系统,通常设置为 0 。 |
配置完/etc/fstab
之后,保存会立即生效
;
如果未生效,执行 mount -a
命令,再通过 df -h
查看
执行 mount -a
命令后,如果设备已经挂载,会忽略.
# 检查/etc/fstab配置文件是否正确
# 自动挂载/etc/fstab
mount -a
常用参数
https://wiki.archlinuxcn.org/wiki/Fstab
nofail
如果该设备不存在,则不要报告该设备的错误。_netdev
在网络就绪
后再执行挂载
。noatime
选项完全禁用每次读取文件时将文件访问时间写入驱动器。nodiratime
选项仅对目录禁用文件访问时间
的写入,而其他文件仍会写入访问时间。
自从内核4.0
版本起还有另一个相关的选项:
lazytime
通过仅在内存中维护对 inode 时间戳的更改来减少对磁盘的写入(访问,修改 和 创建时间)。磁盘时间戳仅在以下情况下更新:- (1) 文件 inode 需要针对与文件时间戳无关的某些更改进行更新,
- (2) 发生与磁盘的同步,
- (3) 从内存中逐出未删除的 inode 或
- (4) 如果自上次将内存中的副本写入磁盘已超过 24 小时。
警告
: 如果系统崩溃, 磁盘上的访问和修改时间可能会距离当前时间最多 24 小时。
防止挂载点错误导致系统启动失败
## nofail 如果该设备不存在,则不要报告该设备的错误。
## x-systemd.device-timeout=9`”设置9秒的超时
### Ubuntu偶尔会在启动时进行快速文件系统检查,持续时间默认超过3秒
/dev/sda2 /mnt/other auto defaults,nofail,x-systemd.device-timeout=9 0 2
# Centos7实例
/dev/vdb2 /disk auto defaults,nofail 0 0
开机自动挂载硬盘分区
参考 https://www.cnblogs.com/EasonJim/p/7447000.html
先查看硬盘信息
# 查看分区表
sudo fdisk -l
# 查看磁盘分区的uuid
sudo blkid
将UUID
写入到/etc/fstab
移动设备如果要持久化挂载,一定要写uuid,设备如果换插了接口,设备路径会变化
# 配置开机自动挂载
sudo vim /etc/fstab
# 写入挂载信息
UUID=11263962-9715-473f-9421-0b604e895aaa /media/user/data ext4 defaults 0 0
# 最后这两个一般都是0,只有系统盘才不需要设置为0
如果修改这个文件导致系统挂了,可以使用Ubuntu的Live CD
功能(即Try Ubuntu
…)进入系统来修改回这个文件。
自动挂载ntfs并使用系统回收站
转载自:https://blog.youkuaiyun.com/hyc679/article/details/81065260
- 在目标挂载点新建目录(必需, 一般在
/media
下), 新建目录Application
- 编辑
/etc/fstab
文件,sudo vi /etc/fstab
, 在末尾添加:
## 磁盘路径 挂载点 文件系统 权限 是否自动备份 是否自动校验
/dev/sda1 /media/Application ntfs defaults 0 0
- 重启,硬盘已经成功挂载, 但是发现当删除文件时,文件会出现强制删除的提示,不能进入回收站, 接着来吧.
- 百度, 参考http://forum.ubuntu.org.cn/viewtopic.php?f=48&t=484559, 使用
id 当前用户名
命令, 查看到用户当前用户名
的uid
和gid
是1000
, 继续编辑/etc/fstab
文件, 将刚刚修改的地方添加上uid
和gid
, 修改为:
## 磁盘路径 挂载点 文件系统 权限 是否自动备份 是否自动校验
/dev/sda1 /media/Application ntfs defaults,uid=1000,gid=1000 0 0
- 重启, 现在删除文件就可以直接删除了, 删除的文件进入了系统的回收站, 再也不怕误删文件啦
但是此时还有一个问题, 刚刚是通过硬盘在系统中的s设备名/dev/sda1
挂载的, 此种方法在添加拨出硬盘时,可能会导致未拨出的硬盘不能正常挂载, 同样的挂载点却挂载了另一个硬盘等现象(设备标识在添加拔出硬盘时会改变), 使用硬盘的UUID来唯一对应某一硬盘即可解决 - 使用
sudo blkid
查看所有硬盘的UUID, 找到要挂载的硬盘的UUID并复制, 继续编辑/etc/fstab
文件, 将/dev/sda1
修改为UUID=硬盘的UUID
:
## 磁盘路径 挂载点 文件系统 权限 是否自动备份 是否自动校验
UUID=88A0F1B6A0F1AAB8 /media/Application ntfs defaults,utf8,uid=1000,gid=1000 0 0
以上解决Ubuntu
下ntfs
硬盘的一般挂载使用, 其中utf8
为指定文件的编码, 防止中文乱码
, 视情况加吧.
详细设置请参考:https://www.cnblogs.com/ahslnx/articles/4833604.html
# 指定utf8为防止乱码
## 磁盘路径 挂载点 文件系统 权限 是否自动备份 是否自动校验
UUID=88A0F1B6A0F1AAB8 /media/Application ntfs defaults,utf8,uid=1000,gid=1000 0 0
加挂硬盘
新安装磁盘到物理机后,找不到磁盘
# 安装hdparm
yum install hdparm -y
# 硬盘硬件安装后,此命令测试linux系统是否能找到挂载的未分区硬盘
sudo hdparm -I /dev/sdb
挂载点相关问题定位思路
• 通过mount
命令检查挂载点
的具体参数
、配置
重点关注:
重复挂载
、非磁盘
的挂载设备
(loop
设备、img
文件等)。
重复挂载
# 查看当前已挂载的文件系统列表
mount |grep -i "挂载点"
找到重复挂载
的文件系统
,并确定重复挂载
的挂载点
。
# 卸载重复挂载的文件系统
umount <挂载点>