AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1167793
Accepted
Morix Dev
Morix Dev
Asked: 2024-11-15 00:22:21 +0800 CST2024-11-15 00:22:21 +0800 CST 2024-11-15 00:22:21 +0800 CST

Linux 重启/关机时的卸载顺序

  • 772

我的嵌入式 Linux 上出现了一个(我认为)非常特殊的情况,我无法正确解决......

由于在启动时挂载文件系统之前要执行特定(自定义)检查,我使用初始 ramdisk 来检查和挂载所有请求的文件系统,然后在 init 完成时将它们传输到根文件系统(因此不/etc/fstab使用挂载设备,而是通过驻留在初始 ramdisk 内的脚本挂载它们)。

更具体地说,首先挂载/boot分区(mmcblk1p1)(以只读模式);在该分区内,我有一个文件(rootfs.squashfs),对应于目标根文件系统的 squashfs 映像......因此,经过一些其他操作(与本文的目的无关)后,初始 ramdisk 脚本最终挂载了 squashfs 映像/rootfs,并在 init 脚本的末尾切换到系统根目录/rootfs(通过switch-root命令);

问题出现在系统重启(或关机或断电)时:当系统尝试卸载所有已挂载的文件系统时,卸载/boot失败(因为设备正忙,这很明显,因为根文件系统是从位于 /boot 中的 squashfs 文件挂载的)。

有没有办法避免/boot在重启/关机/断电时卸载,从而避免卸载失败?由于它是以只读方式安装的,所以应该没有任何风险,不是吗?还是我遗漏了什么?

附言:我不知道它是否有帮助和/或相关:我的操作系统初始化是通过 进行管理的systemd。

systemd
  • 2 2 个回答
  • 109 Views

2 个回答

  • Voted
  1. Best Answer
    Charles Duffy
    2024-11-15T01:51:59+08:002024-11-15T01:51:59+08:00

    实际上您不需要更改顺序。由于文件系统是只读的,因此只需告诉内核它可以稍后完成卸载(当没有剩余引用时),而不是要求它立即成功,这样就比较安全。

    在boot.mount单位配置中,设置标志LazyUnmount=true。

    https://www.freedesktop.org/software/systemd/man/latest/systemd.mount.html#LazyUnmount=

    .mount(如果您从未手动创建单元文件,它们是由扫描 fstab 的 systemd 生成器创建的;即使您不是自己创建它们,您仍然可以用插入文件覆盖挂载单元)。

    • 4
  2. grawity
    2024-11-15T21:39:52+08:002024-11-15T21:39:52+08:00

    Systemd 支持“exitrd”功能(也称为“关闭 initramfs”),在延迟关闭期间它将转回RAM文件系统并执行您提供的脚本,然后可以以任何它想要的方式卸载“真实”根文件系统。

    当找到可执行文件时,将使用 exitrd /run/initramfs/shutdown。在 systemd 停止所有单元并执行其最终关闭处理程序后,它不会打印“无法完成文件系统”,而是将 switch_root 设置为/run/initramfs,将实际根文件系统放置在/oldroot,然后执行/shutdown脚本。

    • 1

相关问题

  • After= 选项在 systemd 服务文件中不起作用

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve