挂载文件系统
Linux 中所有文件系统都必须挂载到文件树上才能够正常访问。
mount and umount
使用 mount 来挂载文件系统。 类 Unix 系统中可访问的所有文件都挂载文件树上,即文件层次结构,以/
为根。这些文件可以分布在多个设备上。mount 命令用于将在设备挂载到这个文件层次结构上。相反的 umount 命令用于从层次结构中删除设备。
# 列出挂载,-t 可以指定仅仅列出对应文件系统的挂载
mount -l [-t filesystem]
# 挂载设备到挂载点
mount [-t filesystem] [-o optlist] device point
# 从/etc/fstab 中寻找对应的设备
mount [options] point
# 自动检查 etc/fstab 文件中有无疏漏被挂载的设备文件,如果有,则进行自动挂载操作
mount -a
$ mount -l -t xfs
/dev/nvme0n1p4 on / type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
/dev/nvme0n1p3 on /home type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
其中比较重要的就是-o
来指定选项:
选项 | 功能 |
---|---|
rw/ro |
是否对挂载的文件系统拥有读写权限,rw 为默认值,表示拥有读写权限;ro 表示只读权限。 |
async/sync |
此文件系统是否使用同步写入(sync)或异步(async)的内存机制,默认为异步 async。 |
dev/nodev |
是否允许从该文件系统的 block 文件中提取数据,为了保证数据安全,默认是 nodev。 |
auto/noauto |
是否允许此文件系统被以 mount -a 的方式进行自动挂载,默认是 auto。 |
suid/nosuid |
设定文件系统是否拥有 SetUID 和 SetGID 权限,默认是拥有。 |
exec/noexec |
设定在文件系统中是否允许执行可执行文件,默认是允许。 |
user/nouser |
设定此文件系统是否允许让普通用户使用 mount 执行实现挂载,默认是不允许(nouser)仅有 root 可以。 |
defaults |
定义默认值,相当于 rw、suid、dev、exec、auto、nouser、async 这 7 个选项。 |
remount |
重新挂载已挂载的文件系统,一般用于指定修改特殊权限。 |
uid/gid |
设置文件系统中文件的所有者和组(默认都是 0 即 root) |
umask |
掩码设置权限,例如umask=022 表示 755 权限 |
mode |
设置文件系统中文件的权限 |
nofail |
如果挂载失败不影响启动(否则会进入紧急模式) |
/etc/fstab
/etc/fstab
文件中保存着基础的静态文件系统配置,mount 会从中读取内容来挂载文件系统,并且 init 也会读取其中的内容来在开机时自动挂载他们:
# /etc/fstab: static file system information.
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/nvme1n1p2 during installation
UUID=f0b1cbf5-1abd-4b7d-970b-70c9e2844e02 / ext4 errors=remount-ro 0 1
# /boot/efi was on /dev/nvme1n1p1 during installation
UUID=5C63-A873 /boot/efi vfat umask=0077 0 1
# /home was on /dev/nvme1n1p4 during installation
UUID=caceedeb-2189-4e5e-9314-3797420e2be8 /home ext4 defaults 0 2
# swap was on /dev/nvme1n1p3 during installation
UUID=6b594cdd-563d-4a70-ac3c-cd78daf194e2 none swap sw 0 0
//192.168.1.13/nas /home/ygd/nas cifs credentials=/home/ygd@ygd.com/.config/smb/smb.cred 0 0
file system
: 要挂载的文件系统,上面是网络文件系统需要cifs-utils
的支持,还可以是设备,通常以UUID=
的形式出现,UUID可以使用lsblk -fs
查看mount point
: 挂载点type
: 文件系统类型,例如 ext4 xfs ntfs 等 cifs 是网络文件系统options
: 实际上就是mount -o
的内容dump
: 用来决定是否做备份的。需要安装 dump 工具,安装之后 dump 会检查 entry 并用数字来决定是否对这个文件系统进行备份。允许的数字是 0 和 1。如果是 0,dump 就会忽略这个文件系统,如果是 1,dump 会每天作一个备份。大部分的用户是没有安装 dump 的,所以对他们而言这个 entry 应该写为 0pass
: fsck 会检查这个选项下的数字来决定检查文件系统的顺序允许的数字是 0 1 和 2。文件系统的选项是 0 将不会被 fsck 检查。如果是 1 表示仅检查非 root 所在的文件系统,2 表示检查所有类型的文件系统
systemd 管理的发行版使用systemd-fstab-generator.service
来管理 fstab
挂载 smb
要挂载 smb 需要安装cifs-utils包。他提供了 mount.cifs
命令(也可以使用mount -t cifs
),后续指定了 UNC 名称(//server/sharename
):
# -o 多个可以使用逗号分隔(逗号左右不能有空格)
sudo mount.cifs -o username=<user>,password=<passwd> //server/sharename /point
# nolock 有时候不好用
sudo mount //server/cnopendata /cnopendata -t cifs -o user,auto,nofail,rw,dir_mode=0777,file_mode=0777
除了共用的,cifs 还支持下选项:
选项 | 功能 |
---|---|
username/password |
用户名和密码 |
credentials |
用户名和密码保存文件 |
file_mode/dir_mode |
挂载的文件和文件夹权限,如果是公共服务 0777 就好,否则可以配合 uid/gid 来设置权限 |
nobrl |
cifs 扩展 ,表示不发送 lock 请求 |
nobrl 是 cifs-utils
的扩展,当使用 sqlite3 来读取挂载类型是 cifs 分区是会出现 database is locked
的错误,这里就需要在挂载参数中添加 nobrl。
这其中比较特殊的就是 credentials
它允许指定一个文件,其中以下列的方式来保存用户名和密码:
由于
/etc/fstab
需要被其他用户读取,如果直接在其中设置用户名和密码会非常不安全,于时就提供了该选项
挂载 NFS
要挂载 NFS 需要nfs-common的支持。需要注意的是 NFS 只支持基于 ip 的访问权限设置,因此需要注意在服务器端开放对应 ip 的访问权限以及可读写性:
# 显示服务器分析的文件系统,debian 需要 su - 才能够运行
sudo showmount -e servername
# 挂载
mount -t nfs servername:/path /mountpoint
他的挂载方式比较特别服务器地址和路径之间使用冒号分隔。而要在 fstab 中定义: