V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
pythonee
V2EX  ›  Linux

linux 的救援模式是什么原理呢?

  •  
  •   pythonee · 2016-05-12 21:04:28 +08:00 · 4081 次点击
    这是一个创建于 2912 天前的主题,其中的信息可能已经有所发展或是发生改变。
    修复 initramfs 和修复 grub 也好,都会用到这个模式,这个模式是怎么工作的呢? iso 跟硬盘上的系统又是怎么关联上的呢?下面这几条命令又是什么意思呢?

    mount --bind /proc /mnt/sysimage/proc
    mount --bind /dev /mnt/sysimage/dev
    mount --bind /sys /mnt/sysimage/sys
    chroot /mnt/sysimage

    在网上基本上都是教大家怎么做的,而没有说为什么
    9 条回复    2016-05-13 18:08:32 +08:00
    hardware
        1
    hardware  
       2016-05-12 21:09:12 +08:00
    善于使用 google 和 man 命令 是每一个 linux 用户必备的技能
    fiepi
        2
    fiepi  
       2016-05-12 21:27:26 +08:00 via Android
    如果你装过 arch 你就能理解了, arch-chroot /mnt
    ayaseangle
        3
    ayaseangle  
       2016-05-12 21:31:01 +08:00 via Android
    应该是临时提供一个 root 环境,而没有挂载根硬盘。
    zent00
        4
    zent00  
       2016-05-12 22:17:40 +08:00
    简单来说,前三步将 /proc /dev /sys 这些目录挂载到目标系统的对应目录下,最后 chroot 到目标系统, chroot 的意思就是 change root ,也就是切换到目标系统,将当前系统的 / 切换到目标系统的 /

    iso 和硬盘上的系统没有什么关系,通常使用 iso 是因为硬盘上的系统已经无法正常启动了,我们只是借助 iso 引导来获得一个正常运行的系统环境(Live System),借助这个系统切换到硬盘上已有的系统,便于进行一系列的修复动作。
    pythonee
        5
    pythonee  
    OP
       2016-05-13 08:41:20 +08:00
    @zent00 为什么只要这三个目录呢
    pythonee
        6
    pythonee  
    OP
       2016-05-13 08:41:54 +08:00
    @zent00 这三个目录是指硬盘上的系统的吗
    zent00
        7
    zent00  
       2016-05-13 12:44:55 +08:00 via iPhone
    @pythonee 因为这三个目录是在系统启动过程中生成的,由于目标系统没有经过正常的引导过程,没有生成并挂载这三个目录,所以需要将现有的 live system 内的这三个目录挂载到目标系统的对应目录下。

    这三个目录的内容不是保存在硬盘上,而是由内核自动生成。

    建议你安装一次 Gentoo 或 LFS 这类系统,你会对 chroot 操作,还有 /proc /dev 这些虚拟文件系统有更深刻的认识。

    PS: 不是要你用 Gentoo/LFS 作为日常使用,只需要你安装一次,并理解安装过程中每个步骤的意义。如果只是照着手册复制粘贴,那还是别浪费时间了。
    Neveroldmilk
        8
    Neveroldmilk  
       2016-05-13 15:45:51 +08:00
    根 WinPEts 一样,依靠加载介质上的系统核心提供精简功能,以便恢复硬盘上瘫痪的系统。
    julyclyde
        9
    julyclyde  
       2016-05-13 18:08:32 +08:00
    本机修复:
    single 模式,简称 s ,或者叫 1 ,在古代 sysvinit 体系里,是一个 runlevel 的名字
    sysvinit 体系里,启动分为 rc.init 和 rc{runlevel}.d 两个阶段,前者是共用的,后者其中 rc1.d 就是单用户模式的启动过程,启动 sulogin 给你个 shell 用

    Live 启动:
    一般是内核命令行加 rescue 这个词,然后在启动过程中判断 /proc/cmdline 里是否有这个词,如果有的话就进入 sulogin 。此种做法和 runlevel 没啥关系
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2211 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 15:31 · PVG 23:31 · LAX 08:31 · JFK 11:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.