我想我能够dnf --installroot=...
使用LD_PRELOAD=/usr/lib64/nosync/nosync.so
. 但这似乎对debootstrap
. 我认为它仍然使用fsync()
,只需查看性能/磁盘活动(特别是“拆包”行)。还有其他方法吗?
1 回答
LD_PRELOAD 不适用于 debootstrap 的原因可能是由于使用chroot
.
官方目前似乎不支持此功能:#700633 - Debootstrap 非常慢。请使用eatmydata 来解决这个问题。请注意,仅当您被迫在老式旋转磁盘上工作时,时差才应该显着。可能还有其他可能的解决方法。LXC 缓存了一个最小的 debian 安装。完成最小安装后,您可以使用 Debianeatmydata
软件包绕过 fsync 进行后续软件包安装。
但是,如果您真的需要这个,可以将 LD_PRELOAD 库放入 chroot。看到 Fedoranosync.so
在 Debian chroot 中工作(即使用外国的、较旧的 libc),我感到很惊讶——我不认为这是一个可靠的组合。
debootstrap/proc
按照您的预期挂载,这使得逃避 chroot 变得容易。
与 Fedora 不同步
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 吃我的数据
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 秒。需要/适用于相同的技术mkosi
。构建一个 systemd 测试映像,它似乎节省了 8 分钟,共 14 分钟。