Steins;Lab

  • 项目
  • 折腾
  • 笔记
  • 图册
  • 杂谈
  • 文章索引 - 博主自荐博文
  • 关于/留言
Steins;Lab
某团的自留研究所
  1. 首页
  2. 学习笔记
  3. 正文

浅析fstab与移动硬盘挂载方法

2018年8月23日 20564点热度 1人点赞 9条评论

近期自己的Raspberry Pi出了点问题,总结总结便有了这篇文章。

本文首先记录“移动硬盘挂载”实际发生的问题,然后浅析了fstab这一重要配置文件和使用,最后总结了Raspberry Pi上自动挂载移动硬盘的方法。本文主要基于Raspberry Pi和Raspbian描述问题,当然它也广泛适用于各Linux发行版环境中 ; )。

Table of Contents

  • 1 问题描述和解决
  • 2 fstab
    • 2.1 手册和wiki
    • 2.2 理解
    • 2.3 参数归纳
  • 3 Desktop Environment的自动挂载
  • 参考资料

 

1 问题描述和解决

之前,我的一块Raspberry Pi作为一个简单的NAS,通过fstab文件实现了开机自动挂载移动硬盘。

根据网上别人嚼过的东西,没有深究。fstab如下:

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过程在

[**  ]A start job is running for dev-disk-by\x2duuid-XXXXXXXX.device (xx s / 1min 30s)

随即进入emergency mode。大致知道原因了:未找到fstab中指定的硬盘

根据Archlinux wiki,若要将其设置为可忽略,可添加nofail选项[1]:

外部设备在插入时挂载,在未插入时忽略。这需要 nofail 选项,可以在启动时若设备不存在直接忽略它而不报错.

/etc/fstab
 /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:

/etc/fstab
/dev/sdg1        /media/backup    jfs    nofail,x-systemd.device-timeout=1    0  2

The nofail option is best combined with the x-systemd.device-timeout option. This is because the default device timeout is 90 seconds, so a disconnected external device with only nofail 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 with x-systemd.automount to postpone automounting until after the unit is available. For example:

/etc/fstab
//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文件如下:

 

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使用技巧,如果你正遇到某些问题,不妨一读:

3提示和技巧

  • 3.1使用systemd自动挂载
    • 3.1.1本地分区
    • 3.1.2远程文件系统
    • 3.1.3加密文件系统
  • 3.2外部设备
  • 3.3文件路径空间
  • 3.4atime选项
  • 3.5重新安装根分区

 

2.2 理解

各类参数解释在上wiki中已经详细给出,能搜到的博文有许许多多。这里是我的一些理解和总结:

fstab的作用是定义磁盘分区,也可定义其他block设备和远程文件系统。它所做出的指定,会在系统引导时挂载。

mount命令和fstab也是有关系的。当mount参数给出一个时,剩余的参数会在fstab中查找[3]。

这也就意味着,除非指定某些选项,否则/etc/fstab在启动时和使用mount -a时,将自动挂载所有指定的设备。这时,若其中设备不存在将导致错误。这时需要用到的选项有noauto,nofail。

 

2.3 参数归纳

一个典型的fstab结构如下:

# <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

相关

标签: Linux Raspberry Pi 运维
最后更新:2018年8月23日

SPtuan

SPtuan 是一名普通的工程师,最大的愿望是度过平静的时光。 当前从事网络/CDN/对象存储研发。

点赞
< 上一篇
下一篇 >
0 0 votes
文章评分
Subscribe
Login
提醒
guest

guest

9 评论
最新
最旧 得票最多
Inline Feedbacks
View all comments
skip
skip
1 年 之前

可能 x-systemd.device-timeout 的数值要设置高一点,在我这里如果设置 x-systemd.device-timeout=1 ,开机挂载的时候会失败。

0
回复
SPtuan
SPtuan
作者
Reply to  skip
1 年 之前

@skip 谢谢,现在的发行版可能都是 systemd 管理 mount 了,置顶供参考

0
回复
qnson
qnson
1 年 之前

感谢分享!

1
回复
Terry.W
Terry.W
3 年 之前

也遇到了同样问题,用你的方法修改有效,感谢分享~

1
回复
SPtuan
SPtuan
作者
Reply to  Terry.W
2 年 之前

@Terry.W 感谢反馈~

0
回复
anseey
anseey
5 年 之前

今天遇到这问题了,感谢

0
回复
SPtuan
SPtuan
作者
Reply to  anseey
5 年 之前

@anseey 谢谢留言,很高兴能有所帮助! ^ ^

0
回复
youge
youge
6 年 之前

博文、慢慢的、开始有学♂术气息了

0
回复
SPtuan
SPtuan
作者
Reply to  youge
6 年 之前

@youge 暗示转行

0
回复

SPtuan

SPtuan 是一名普通的工程师,最大的愿望是度过平静的时光。
当前从事网络/CDN/对象存储研发。

  • 1 问题描述和解决
  • 2 fstab
    • 2.1 手册和wiki
    • 2.2 理解
    • 2.3 参数归纳
  • 3 Desktop Environment的自动挂载
  • 参考资料
分类
  • Uncategorized
  • 图册
  • 学习笔记
  • 库
  • 折腾
  • 杂谈
  • 瞎**扯
  • 碎碎念
  • 项目跟踪
最近评论
SPtuan 发布于 2 个月前(03月22日) 书签: 关于 disk-io 的经验, 异步/同步 io 系统设计的经验 https://you...
SPtuan 发布于 2 个月前(03月21日) 如果公司不是对外提供这些服务的,这种岗位都是 infra 部门,平均年龄确实会大一些。尤其构建和维护...
HUA 发布于 2 个月前(03月19日) 想请问博主对于国内CDN行业,以及CDN调度、DNS托管类服务相关岗位的看法,以及是否还推荐校招新人...
SPtuan 发布于 3 个月前(02月03日) 2025 注: 长辈对于只身去深圳的担忧,更多地来自于 80s/90s 治安情况。近几年了解了严打...
SPtuan 发布于 4 个月前(01月16日) 哈哈,100就100吧,新年快乐!
热门主题 & 页面
  • [实验]VPS搭建ss服务中转实现纯ipv6访问网络-校园网免流量
  • HTTP Header Name 大小写敏感问题
  • iowait 到底是什么?
  • 全球互联网拓扑探索 (1) : 互联网是如何工作的
  • 基于openvpn的校园网ipv6免流量方案 |ipv6|校园网|免流量
归档
  • 2025 年 5 月
  • 2025 年 3 月
  • 2024 年 12 月
  • 2024 年 9 月
  • 2024 年 8 月
  • 2024 年 5 月
  • 2024 年 3 月
  • 2024 年 2 月
  • 2023 年 12 月
  • 2023 年 11 月
  • 2023 年 9 月
  • 2023 年 8 月
  • 2023 年 4 月
  • 2023 年 1 月
  • 2022 年 12 月
  • 2022 年 10 月
  • 2022 年 9 月
  • 2022 年 7 月
  • 2022 年 6 月
  • 2022 年 2 月
  • 2021 年 12 月
  • 2021 年 11 月
  • 2021 年 2 月
  • 2021 年 1 月
  • 2020 年 9 月
  • 2020 年 4 月
  • 2020 年 3 月
  • 2020 年 1 月
  • 2019 年 8 月
  • 2019 年 7 月
  • 2019 年 5 月
  • 2019 年 4 月
  • 2019 年 3 月
  • 2019 年 2 月
  • 2018 年 12 月
  • 2018 年 10 月
  • 2018 年 9 月
  • 2018 年 8 月
  • 2018 年 5 月
  • 2018 年 2 月
  • 2018 年 1 月
  • 2017 年 11 月
  • 2017 年 9 月
  • 2017 年 7 月
  • 2017 年 6 月
  • 2017 年 5 月
  • 2017 年 4 月
  • 2017 年 3 月
  • 2017 年 2 月
  • 2017 年 1 月
  • 2016 年 12 月
  • 2016 年 11 月
  • 2016 年 10 月
  • 2016 年 9 月
  • 2016 年 8 月
  • 2016 年 7 月
  • 2016 年 6 月
  • 2016 年 5 月
  • 2016 年 4 月
  • 2016 年 3 月
  • 2016 年 2 月
  • 2016 年 1 月
  • 2015 年 12 月
  • 2015 年 11 月
  • 2015 年 9 月

友情链接:

Blessing Studio hahaschool 绘枫和畅 魔法少女Fandy monsterx Clarke的博客 Luminous’ Home Shintaku's Blog
蓝黑的博客 haruhi.club Yida的博客 Bo2SS 涛叔 TangBao 同和君Hocassian

Steins;Lab 团子神社 zdfmc.net

steinslab.io built with ❤. Thanks for all 2015-2025.

Theme Kratos Made By Seaton Jiang

wpDiscuz