是否可以通过禁用 fsync() 来加速 debootstrap?

Is it possible to speed up debootstrap by disabling fsync()?

我想我可以使用 LD_PRELOAD=/usr/lib64/nosync/nosync.so 加快创建 Fedora chroot (dnf --installroot=...) 的速度。但这似乎对 debootstrap 没有帮助。我认为它仍然使用 fsync(),只是查看性能/磁盘 activity(特别是 "Unpacking" 行)。还有别的办法吗?

LD_PRELOAD 对 debootstrap 不起作用的原因可能是由于使用了 chroot

据官方说法,目前似乎不支持此功能:#700633 - Debootstrap is very slow. Please use eatmydata to fix this。请注意,只有当您被迫在老式旋转磁盘上工作时,时间差异才会显着。可能还有其他可能的解决方法。 LXC 缓存最小的 debian 安装。完成最小安装后,您可以使用 Debian eatmydata 软件包绕过 fsync 以进行后续软件包安装。

但是,如果您确实需要它, 可以将 LD_PRELOAD 库放入 chroot。我很惊讶地看到 Fedora nosync.so 在 Debian chroot 中工作(即使用外国的、较旧的 libc)——我不认为这是一个可靠的组合。

debootstrap 会像您预期的那样挂载 /proc,这使得逃脱 chroot 变得容易。

使用 Fedora nosync

sudo sh -c '
exec 3< /usr/lib64/nosync/nosync.so
LD_PRELOAD=/proc/$$/fd/3 time debootstrap --arch=amd64 --variant=minbase jessie jessie-tree http://ftp.debian.org/debian
'

使用 Debian eatmydata

sudo sh -c '
exec 3< /usr/lib/x86_64-linux-gnu/libeatmydata.so
LD_PRELOAD=/proc/$$/fd/3 time debootstrap --arch=amd64 --variant=minbase jessie jessie-tree http://ftp.debian.org/debian
'

结果

它在 SATA SSD 上节省了不到 20 秒,否则需要 100 秒)。这种情况下的主要限制因素似乎是 CPU(2010 年的移动 i5)。

在带硬盘驱动器的笔记本电脑(以及 2015 年的 i5 CPU)上,它从 135 秒的起点节省了 80 秒。同样的技术是 needed/applicable 用于 mkosi。构建 systemd 测试图像,似乎节省了 8 分钟,共 14 分钟。