浅析 fstab 与移动硬盘挂载方法
本文转自 Steins;Lab,非常详细地介绍了树莓派上 fstab 的配置项。
近期自己的Raspberry Pi出了点问题,总结总结便有了这篇文章。
本文首先记录“移动硬盘挂载”实际发生的问题,然后浅析了fstab这一重要配置文件和使用,最后总结了Raspberry Pi上自动挂载移动硬盘的方法。本文主要基于Raspberry Pi和Raspbian描述问题,当然它也广泛适用于各Linux发行版环境中 ; )。
1 问题描述和解决
之前,我的一块Raspberry Pi作为一个简单的NAS,通过fstab
文件实现了开机自动挂载移动硬盘。
根据网上别人嚼过的东西,没有深究。fstab如下:
1
2
3
4
5
6
7
|
proc /proc proc defaults 0 0 /dev/mmcblk0p1 /boot vfat defaults 0 2 /dev/mmcblk0p2 / ext4 defaults,noatime 0 1 UUID=FD720D1BCFDB2930 /media/pi/usbhdd ntfs defaults,noatime 0 0 # a swapfile is not a swap partition, no line here # use dphys-swapfile swap[on|off] for that |
使用UUID作为标识挂载了一块NTFS的移动硬盘,参数为defaults,noatime
,一直以来相安无事。
直至,我把移动硬盘拔掉后开机,无法正常引导进入系统。
我一度以为是我经常暴力关机导致tf卡文件系统损坏。连上显示器和键盘救援一下,boot过程在
1
|
[** ]A start job is running for dev-disk-by\x2duuid-XXXXXXXX.device (xx s / 1min 30s) |
随即进入emergency mode。大致知道原因了:未找到fstab中指定的硬盘
根据Archlinux wiki,若要将其设置为可忽略,可添加nofail
选项[1]:
外部设备在插入时挂载,在未插入时忽略。这需要
nofail
选项,可以在启动时若设备不存在直接忽略它而不报错.
1/etc/fstab
1/dev/sdg1 /media/backup jfs defaults,nofail 0 2
External devices that are to be mounted when present but ignored if absent may require the
nofail
option. This prevents errors being reported at boot. For example:
1/etc/fstab
1/dev/sdg1 /media/backup jfs nofail,x-systemd.device-timeout=1 0 2
The
nofail
option is best combined with thex-systemd.device-timeout
option. This is because the default device timeout is 90 seconds, so a disconnected external device with onlynofail
will make your boot take 90 seconds longer, unless you reconfigure the timeout as shown. Make sure not to set the timeout to 0, as this translates to infinite timeout.If your external device requires another systemd unit to be loaded (for example the network for a network share) you can use
x-systemd.requires=x
combined withx-systemd.automount
to postpone automounting until after the unit is available. For example:
1/etc/fstab
1//host/share /net/share cifs noauto,nofail,x-systemd.automount,x-systemd.requires=network-online.target,x-systemd.device-timeout=10,workgroup=workgroup,credentials=/foo/credentials 0 0
综合参考[2],我最终的fstab文件如下:
1
2
3
4
5
6
7
|
proc /proc proc defaults 0 0 /dev/mmcblk0p1 /boot vfat defaults 0 2 /dev/mmcblk0p2 / ext4 defaults,noatime 0 1 UUID=FD720D1BCFDB2930 /media/pi/usbhdd ntfs defaults,nofail,x-systemd.device-timeout=1,noatime 0 0 # a swapfile is not a swap partition, no line here # use dphys-swapfile swap[on|off] for that |
即使boot阶段没有接入移动硬盘,也能正常启动。
2 fstab
fstab文件可以被用来定义磁盘分区,各种其他块设备,或远程文件系统应如何安装到文件系统。
每个文件系统都在一个单独的行中描述。这些定义将在引导时动态转换为systemd安装单元,并在重新加载系统管理器的配置时。
在第一节中可以看到典型的fstab结构。
2.1 手册和wiki
关于fstab,wiki上已经写得非常清晰了,参考链接如下:
https://help.ubuntu.com/community/Fstab
http://manpages.ubuntu.com/manpages/bionic/en/man5/fstab.5.html
https://wiki.archlinux.org/index.php/Fstab
其中,ArchLinux Wiki中给出了一些针对各类场景的fstab使用技巧,如果你正遇到某些问题,不妨一读:
2.2 理解
各类参数解释在上wiki中已经详细给出,能搜到的博文有许许多多。这里是我的一些理解和总结:
fstab
的作用是定义磁盘分区,也可定义其他block设备和远程文件系统。它所做出的指定,会在系统引导时挂载。
mount
命令和fstab
也是有关系的。当mount
参数给出一个时,剩余的参数会在fstab
中查找[3]。
这也就意味着,除非指定某些选项,否则/etc/fstab
在启动时和使用mount -a
时,将自动挂载所有指定的设备。这时,若其中设备不存在将导致错误。这时需要用到的选项有noauto
,nofail
。
2.3 参数归纳
一个典型的fstab结构如下:
1
2
3
4
|
# <device> <dir> <type><options> <dump> <fsck> /dev/sda1 / ext4 noatime 0 1 /dev/sda2 none swap defaults 0 0 /dev/sda3 /home ext4 noatime 0 2 |
每一行由以下参数组成 <device> <dir> <type> <options> <dump> <fsck>
<device>
描述了要安装的块特殊设备或远程文件系统; 请参阅#Identifying filesystems。<dir>
介绍了安装目录,<type>
该文件系统类型,以及<options>
相关的安装选项; 见mount(8)和ext4(5)。<dump>
由dump(8)实用程序检查。此字段通常设置为0
,禁用检查。<fsck>
设置启动时文件系统检查的顺序; 见fsck(8)。对于根设备应该是1
。对于其他分区应该是2
,或0
禁用检查。
options常用参数类型:
auto
– 在启动时或键入了mount -a
命令时自动挂载。noauto
– 只在你的命令下被挂载。exec
– 允许执行此分区的二进制文件。noexec
– 不允许执行此文件系统上的二进制文件。ro
– 以只读模式挂载文件系统。rw
– 以读写模式挂载文件系统。user
– 允许任意用户挂载此文件系统,若无显示定义,隐含启用noexec
,nosuid
,nodev
参数。users
– 允许所有 users 组中的用户挂载文件系统.nouser
– 只能被 root 挂载。owner
– 允许设备所有者挂载.sync
– I/O 同步进行。async
– I/O 异步进行。dev
– 解析文件系统上的块特殊设备。nodev
– 不解析文件系统上的块特殊设备。suid
– 允许 suid 操作和设定 sgid 位。这一参数通常用于一些特殊任务,使一般用户运行程序时临时提升权限。nosuid
– 禁止 suid 操作和设定 sgid 位。noatime
– 不更新文件系统上 inode 访问记录,可以提升性能(参见 atime 参数)。nodiratime
– 不更新文件系统上的目录 inode 访问记录,可以提升性能(参见 atime 参数)。relatime
– 实时更新 inode access 记录。只有在记录中的访问时间早于当前访问才会被更新。(与 noatime 相似,但不会打断如 mutt 或其它程序探测文件在上次访问后是否被修改的进程。),可以提升性能(参见 atime 参数)。flush
–vfat
的选项,更频繁的刷新数据,复制对话框或进度条在全部数据都写入后才消失。defaults
– 使用文件系统的默认挂载参数,例如ext4
的默认参数为:rw
,suid
,dev
,exec
,auto
,nouser
,async
.
3 Desktop Environment的自动挂载
实际使用Raspbian桌面版的同学们可能发现了,在PIXEL(LXDE)桌面环境中,即使我们没有设置fstab
,插入usb存储设备后,它将自动被挂载到 /media/<user>/<label>
下。
这个功能我们在Linux各个发行版的桌面版本都用到过。自动挂载对于桌面用户,非常友好。通常由GUI/DE协同处理[4]。对于Raspbian来说,在PIXEL自带的PCManFM文件管理器中,对自动挂载usb存储设备的设置选项如下:
有趣的是,我曾经分别以root和pi的账户开启了2个PIXEL桌面。此时插入USB存储介质时,某一个桌面就会显示挂载冲突。这也使我开始意识到自动挂载是由GUI/DE操作的。
若你的Raspberry Pi作为远端服务器设备,也在运行桌面版,不妨使用Desktop Environment作为你的工具帮你实现自动挂载。
参考资料
[1] Archlinux Wiki – Fstab https://wiki.archlinux.org/index.php/Fstab
[2] How to setup mount / auto-mount USB Hard Drive on Raspberry Pi https://gist.github.com/etes/aa76a6e9c80579872e5f
[3] mount(8) – debian wiki https://manpages.debian.org/jessie/mount/mount.8.en.html
[4] Stock Pi3 – what process is auto-mounting removable media? https://raspberrypi.stackexchange.com/questions/65739/stock-pi3-what-process-is-auto-mounting-removable-media
出处:http://shumeipai.nxez.com/2019/01/17/fstab-and-mobile-hard-disk-mounting-method.html
浅析 fstab 与移动硬盘挂载方法的更多相关文章
- Linux中盘符的两种挂载方法
相信接触过Linux系统的人对于mount命令都不陌生,今天是农历2017年的最后一个工作日,趁着时光还在,就说一下两种不同的挂载方法吧. 课前小知识: 命令格式:mount [-t vfstype] ...
- Linux常用命令:fdisk mkfs mount umount fstab实现自动挂载
写在前 记录点常用命令,fdisk mkfs mount和umount,以及fstab实现自动挂载 fdisk fdisk主要用于操作硬盘的分区表.分区,下面简单记一点最常用的部分 查看当前系统识别到 ...
- Tomcat 保存镜像实战操作( 目录挂载方法 )
查看数据保存的位置 docker inspect --format='{{.Mounts}}' mxg_tomcat 宿主机数据保存在 /usr/local/project , 将此路径数据备份在 b ...
- Linux 通过 UUID 在 fstab 中自动挂载分区
Linux 通过 UUID 在 fstab 中自动挂载分区 summerm6关注 2019.10.17 16:29:00字数 1,542阅读 605 https://xiexianbin.cn/lin ...
- Linux中挂载移动硬盘的方法
- fdisk -l 找出移动硬盘对应的设备 - mkdir 创建挂载点 mkdir /mnt/usb - mount mount -t ntfs-3g /dev/sdb1 /mnt/usb - u ...
- 磁盘挂载方法 fdisk parted
1创建磁盘分区 [root@web01 ~]# fdisk -cu /dev/sdc -c 关闭dos兼容模式-u 使用扇区进行分区 (默认位柱面)[root@web01 ~]# partprobe ...
- [Linux] - Windows与Linux网络共享文件夹挂载方法
Windows与Linux网络SMB方式文件夹共享挂载 本示例系统: Windows 2003+ Linux-Centos/Ubuntu 本示例全为命令行操作,如何使用Windows.Linux命令行 ...
- Linux 硬盘挂载方法
linux 硬盘分区,分区,删除分区,格式化,挂载,卸载笔记 硬盘挂载操作工作步骤: 1.先查看目前机器上有几块硬盘,查看命令有两种: 命令1:# fdisk –l 命令2:# dmesg | gre ...
- Centos7 fstab盘符挂载硬盘导致重启系统失败解决办法
服务器拥有多个硬盘插槽,在进行维护或重启时,这些硬盘的相对位置可能发生变化.利用盘符(dev/vda)方式挂载磁盘,可能由于磁盘顺序变化导致重启时读取fstab文件发生错误,从而无法正常重启服务器. ...
随机推荐
- A1038 Recover the Smallest Number (30 分)
一.技术总结 此问题是贪心类问题,给出可能有前导零的数字串,将他们按照某个顺序拼接,使生成的数最小. 解决方案,就是使用cmp函数,因为两两字符串进行拼接,进行排序从小到大. 拼接过后会有0可能出现在 ...
- oracle --工具 ODU
一,什么是ODU ODU全称为Oracle Data ba se Unloader ,是用于Oracle 数据库紧急恢复的软件,在各种原因 造成的数据库不能打开或数据删除后没有备份时,使用ODU抢救数 ...
- Scala函数式编程实现排序算法
记得<Function Thinking>这本书中提到,现在的编程范式有两类,一类是“命令式编程”,另一类是“函数式编程”,现在我们最常使用的许多语言像c.c++.java都是命令式的,但 ...
- react 16 Hooks渲染流程
useState react对useState进行了封装,调用了mountState. function useState<S>( initialState: (() => S) | ...
- 《Interest Rate Risk Modeling》阅读笔记——第四章:M-absolute 和 M-square 风险度量
目录 第四章:M-absolute 和 M-square 风险度量 思维导图 两个重要不等式的推导 关于 \(M^A\) 的不等式 关于 \(M^2\) 的不等式 凸性效应(CE)和风险效应(RE)的 ...
- unity工具开发
1.EditorWindow通过拖拽获取文件夹或者文件路径 #region 拖拽相关 Rect rect4 = EditorGUILayout.GetControlRect(); //将上面的框作为文 ...
- Sitecore个性化 - 基础知识
许多组织选择Sitecore作为其高级个性化功能的网站平台.Sitecore个性化需要什么以及它能为您的品牌提供什么? 今天, 对于希望提供更好的客户体验的组织来说,个性化不仅仅是一个很好的选择 - ...
- Dart:3.Dart运算符、流程控制
一 . 运算符 以下列出 Dart 的运算符,从高到低按照优先级排列: 描述 运算符 一元运算符(后置) expr++ expr-- () [] . ?. 一元运算符(前置) -expr !expr ...
- Blockstack: A Global Naming and Storage System Secured by Blockchains
作者:Muneeb Ali, Jude Nelson, Ryan Shea, and Michael Freedman Blockstack Labs and Princeton University ...
- Runtime.addShutdownHook()(译)
序言: 每一个Java程序都可以为JVM增加一个关闭钩子.JVM将在关闭之前执行关闭钩子中的指令. 问题: 一个程序可能需要在退出前执行一些指令.程序可能由于下列原因而退出: 所有的线程已经执行完毕 ...