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

[ 复制链接 ]
admin | 2020-2-8 04:31:30 | 显示全部楼层 | 阅读模式 打印 上一主题 下一主题

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x



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

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


本文转自 Steins;Lab,非常详细地介绍了树莓派上 fstab 的配置项。

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

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结构如下:

#                                    
/dev/sda1              /             ext4      noatime               0      1
/dev/sda2              none          swap      defaults              0      0
/dev/sda(云凌阁www.yun-ling.cn)3              /home         ext4      noatime               0      2
每一行由以下参数组成      
  • 描述了要安装的块特殊设备或远程文件系统; 请参阅#Identifying filesystems
  • 介绍了安装目录,该文件系统类型,以及相关的安装选项; 见mount(8)ext4(5)
  • dump(8)实用程序检查。此字段通常设置为0,禁用检查。
  • 设置启动时文件系统检查的顺序; 见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//下。

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

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


    这个功能我们在Linux各个发行版的桌面版本都用到过。自动挂载对于桌面用户,非常友好。通常由GUI/DE协同处理[4]。对于Raspbian来说,在PIXEL自带的PCManFM文件管理器中,对自动挂载usb存储设备的设置选项如下:

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

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


    有趣的是,我曾经分别以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


           
  • 温馨提示:
    1、在论坛里发表的文章仅代表作者本人的观点,与本网站立场无关。
    2、论坛的所有内容都不保证其准确性,有效性,时间性。阅读本站内容因误导等因素而造成的损失本站不承担连带责任。
    3、当政府机关依照法定程序要求披露信息时,论坛均得免责。
    4、若因线路及非本站所能控制范围的故障导致暂停服务期间造成的一切不便与损失,论坛不负任何责任。
    5、注册会员通过任何手段和方法针对论坛进行破坏,我们有权对其行为作出处理。并保留进一步追究其责任的权利。
    回复 推荐到N格

    使用道具 举报

    大神点评(1)

    您需要登录后才可以回帖 登录 | 立即注册
      云凌阁
      Jorgedum | 2020-6-4 12:00:23 | 显示全部楼层
      额,虽然看不懂在说神马,不过还是支持云凌阁~@_@
      回复 支持 反对

      使用道具 举报

      相关推荐
      云凌阁

      关注1

      粉丝0

      帖子94526

      发布主题