linux root root 时间,linux – 你什么时候使用pivot_root而不是switch_root?

While both an initramfs and an initrd serve the same purpose, there

are 2 differences. The most obvious difference is that an initrd is

loaded into a ramdisk. It consists of an actual filesystem (typically

ext2) which is mounted in a ramdisk. An initramfs, on the other hand,

is not a filesystem. It is simply a (compressed) cpio archive (of type

newc) which is unpacked into a tmpfs. This has a side-effect of making

the initramfs a bit more optimized and capable of loading a little

earlier in the kernel boot process than an initrd. Also, the size of

the initramfs in memory is smaller, since the kernel can adapt the

size of the tmpfs to what is actually loaded, rather than relying on

predefined ramdisk sizes, and it can also clean up the ram that was

used whereas ramdisks tend to remain in use (due to details of the

pivot_root implementation).

There is also another side-effect difference: how the root device (and

switching to it) is handled. Since an initrd is an actual filesystem

unpacked into ram, the root device must actually be the ramdisk. For

an initramfs, there is a kernel “rootfs” which becomes the tmpfs that

the initramfs is unpacked into (if the kernel loads an initramfs; if

not, then the rootfs is simply the filesystem specified via the root=

kernel boot parameter), but this interim rootfs should not be

specified as the root= boot parameter (and there wouldn’t be a way to

do so, since there’s no device attached to it). This means that you

can still pass your real root device to the kernel when using an

initramfs. With an initrd, you have to process what the real root

device is yourself. Also, since the “real” root device with an initrd

is the ramdisk, the kernel has to really swith root devices from one

real device (the ramdisk) to the other (your real root). In the case

of an initramfs, the initramfs space (the tmpfs) is not a real device,

so the kernel doesn’t switch real devices. Thus, while the command

pivot_root is used with an initrd, a different command has to be used

for an initramfs. Busybox provides switch_root to accomplish this,

while klibc offers new_root.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值