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

时间:2016-03-31 10:35:07

标签: debian fsync

我认为我能够使用dnf --installroot=...加快创建Fedora chroot(LD_PRELOAD=/usr/lib64/nosync/nosync.so)。但这对debootstrap似乎没有帮助。我认为它仍然使用fsync(),只是查看性能/磁盘活动(特别是“解包”行)。还有另一种方式吗?

1 个答案:

答案 0 :(得分:1)

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秒。 mkosi需要/适用相同的技术。建立一个系统化的测试图像,14个节目似乎可以节省8分钟。