让 Archlinux 的 pacman 健步如飞

pacman使用 Archlinux 的朋友大概遇到过这样的烦恼,软件安装得比较多的时候,再用 pacman 做任何事情的时候都可以看到硬盘狂转一段时间,然后才有反应。

pacman 官方给了一个 pacman-optimize,它会把 pacman 数据库文件打包到别的地方,删除,然后再放回去。这样做可能会让这些零碎的文件在硬盘上是连续排列的,但实际效果却不是很好。

虽然用 Archlinux 应该有三年左右了,但我还从来没有看过 pacman 的数据库是什么模样。有一天终于忍不住去看了一下 /var/lib/pacman 下面到底是什么,原来是这么多零碎的小文件啊!

于是解决方案也就有了:把所谓的 pacman 数据库放到 reiserfs 文件系统里。如果你本来在这个地方用的就是 reiserfs 的话,那么不需要做任何事情, pacman 应该就很快了。如果你和我一样用的是 ext4 这样的文件系统,也不必慌张地把整个分区都换成 reiserfs。

新建一个 160 MB 的 reiserfs 文件 pacman_db.fs

truncate pacman_db.fs --size 160M
mkfs.reiserfs -f ./pacman_db.fs

把现有的 pacman 数据库复制到这个 reiserfs 里面:

sudo mount pacman_db.fs -t reiserfs /mnt -o loop 
cp -a /var/lib/pacman/* /mnt
sudo umount /mnt

接下来修改 /etc/fstab,加上一行:

/[path_to_pacman_db]/pacman_db.fs /var/lib/pacman reiserfs defaults,loop 0 4

左边的 [path_to_pacman_db] 需要根据实际情况填一下。最右边的 4 应该是比 fstab 中其他条目大一些的数字,表示 fsck 检查时最后处理这个地方。

如果想让这个设置立即生效,执行 sudo mount /var/lib/pacman 即可。否则,重启一下就可以了。现在,使用 pacman -Syu 更新一下系统,是不是比以前快许多? :)

22 thoughts on “让 Archlinux 的 pacman 健步如飞

    • @pluskid :
      不觉得,你多装些软件试试看?用 reiserfs 之后的 “resolving dependencies…” 会在 0.x 秒内结束,硬盘也不会闪,ext4 应该是办不到的。

  1. 据说ext4 比 ext3 and 2 慢但对细碎文件支持ext3比2好,所以我现在统一采用ext3格式!算是保守吧!据说btrfs很强劲,不知道是否如此!

    • @君临天下 : 不知道你看到的是什么资料。ext4 在各方面的速度比 ext3 好,ext3 是比无日志的 ext2 慢一点。不过大量小文件的时候 extfs 都会悲剧……

      我以前看的文件系统评测之一在这里,很不错,推荐参考。

    • @hippo : 是的,这一篇文章主要就是说用 reiserfs 来处理 pacman 的 cache 中大量小文件的情况,效果比较明显。

  2. 不过我还是好奇,这个 pacman_db.fs 文件,是以什么形式存在硬盘上面的呢?比如,我的/是jfs的,然后在这里建立了这个reiserfs格式的文件,它就是一个文件放在那里了?

    • @hippo : 我是把它放在那里的。这种做法其实有些亡羊补牢的感觉,如果很早就知道这样做的好处的话,在硬盘分区的时候就分出来一块地方就好了。

  3. 哈,文件系统的事情开始确实弄不清楚的……我现在Arch的根分区用了jfs,说是已经停止开发了……呜……

  4. Pingback: 记录一下这几天折腾的东西 | oppih

  5. 这样改动之后,有时候会开机自动fsck这个文件系统,可是此时/是只读的,所以就没办法检查,出错,得手动挂载……
    你是怎么解决的?
    把它单独弄成一个分区?

    • @oldherl : 我只在异常断电后遇到这个问题,届时需要手动 remount。如果在 fstab 中的最后一栏是 0 ,则回避自动检查,修改成比 / 大一些的数字则会在 / 挂载之后才会检查。

  6. 出状况了哦……前几天,给我出来这么个:

    file system has been mounted 31 times without being checked

    偏偏我还不会手工检查……还不敢乱来。怕给弄坏了。。。

    • @oppih : 先 unmount,再用 fsck 工具手工检查一次,然后再 mount 不会有问题的…… 如果怕出问题就先 copy 一份备份一下。

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>