Alice Asked: 2019-03-03 18:22:07 +0800 CST2019-03-03 18:22:07 +0800 CST 2019-03-03 18:22:07 +0800 CST 'rm -fr' 会删除引导加载程序吗? 772 我了解到引导加载程序永久存储在机器的 ROM 中,而今天的 PC 采用闪存技术构建,因此可以在特殊情况下进行更改。 是rm -rf /特殊情况吗? 是否rm -rf删除引导加载程序? boot 1 个回答 Voted Best Answer Sergiy Kolodyazhnyy 2019-03-03T18:31:54+08:002019-03-03T18:31:54+08:00 TL;DR:rm -rf /不会删除引导加载程序本身,而是删除引导加载程序需要的所有内容(以及操作系统需要运行的所有内容)。 引导加载程序永久存储在机器的 ROM 中 不完全的。在大多数现代系统上,引导加载程序可以位于磁盘的主引导记录部分(第一个 512 B)上,也可以位于单独的设备上(另请参阅)。并引用有关 linux 内核映像的维基百科: ...某些 i386 系统的限制意味着只有硬盘的前 1024 个柱面是可寻址的。 为了克服这个问题,Linux 分销商鼓励用户在其驱动器的开头创建一个分区,专门用于存储引导加载程序和内核相关文件。 嵌入式系统,例如 Raspberry Pi,实际上可能在 ROM 中具有引导加载程序(或第一阶段引导加载程序)。 rm -rf /像任何其他命令一样加载到内存中并从那里执行,因此它递归地删除/目录(/文件系统)中的所有内容,包括它自己的原始文件/bin/rm。它通常对 MBR 分区一无所知,只对/. 换句话说,具有引导加载程序本身的前 512 B 磁盘没有被删除,但/boot目录被删除,并且包含引导加载程序(通常是 GRUB)的配置文件和initrd.img在主文件系统之前加载的临时文件/系统。如果您查看linux.com 上的 Grub 救援文章,您会发现即使引导加载程序本身可能正在工作,它也必须知道根文件系统所在的磁盘、内核映像 vmlinuz 所在的位置以及 initrd。也就是说,他们在 grub 的 shell 中给出的例子是 grub> set root=(hd0,1) grub> linux /boot/vmlinuz-3.13.0-29-generic root=/dev/sda1 grub> initrd /boot/initrd.img-3.13.0-29-generic grub> boot where(hd0,1)用根文件系统标识磁盘和分区。 即使引导加载程序本身没有被删除,当/boot单独被删除时确实会导致问题。如果rm -rf /您要从文件系统中删除所有内容,包括init- 第一个进程,内核
TL;DR:
rm -rf /
不会删除引导加载程序本身,而是删除引导加载程序需要的所有内容(以及操作系统需要运行的所有内容)。不完全的。在大多数现代系统上,引导加载程序可以位于磁盘的主引导记录部分(第一个 512 B)上,也可以位于单独的设备上(另请参阅)。并引用有关 linux 内核映像的维基百科:
嵌入式系统,例如 Raspberry Pi,实际上可能在 ROM 中具有引导加载程序(或第一阶段引导加载程序)。
rm -rf /
像任何其他命令一样加载到内存中并从那里执行,因此它递归地删除/
目录(/
文件系统)中的所有内容,包括它自己的原始文件/bin/rm
。它通常对 MBR 分区一无所知,只对/
.换句话说,具有引导加载程序本身的前 512 B 磁盘没有被删除,但
/boot
目录被删除,并且包含引导加载程序(通常是 GRUB)的配置文件和initrd.img
在主文件系统之前加载的临时文件/
系统。如果您查看linux.com 上的 Grub 救援文章,您会发现即使引导加载程序本身可能正在工作,它也必须知道根文件系统所在的磁盘、内核映像 vmlinuz 所在的位置以及 initrd。也就是说,他们在 grub 的 shell 中给出的例子是where
(hd0,1)
用根文件系统标识磁盘和分区。即使引导加载程序本身没有被删除,当
/boot
单独被删除时确实会导致问题。如果rm -rf /
您要从文件系统中删除所有内容,包括init
- 第一个进程,内核