LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1756|回复: 14

把/usr/portage, /var/tmp/portage 放入内存中,推荐内存大的兄弟使用,升级时速度快,硬

[复制链接]
发表于 2010-11-24 13:14:19 | 显示全部楼层 |阅读模式
升级时,安装软件时,硬盘狂闪,很心痛吧。有升级强迫症的,用下面的方法试试,最好有2G内存,4G更好。

首选把distfiles目录从/usr/portage中移出,把distfile的目录设为/usr/distfiles, /etc/make.conf中加入 DISTDIR="/usr/distfiles" :

  1. mkdir /usr/distfiles
  2. rm -r /usr/portage/distfiles/
复制代码


把layman的目录放到/usr/portage/local下,自己的overlay也在该目录下。
layman原来把overlay放在/usr/local/portage下,也是大量小文件,移到一起处理吧。

  1. mkdir /usr/portage/local
  2. mv /usr/local/portage/* /usr/portage/local/
  3. rmdir /usr/local/portage/
复制代码

make.conf如下的条目做相应修改:

  1. source /usr/portage/local/layman/make.conf
复制代码


修改/etc/layman/layman.cfg中storage参数为 :

  1. storage   : /usr/portage/local/layman
复制代码


压缩现在的portage

  1. # cd usr
  2. # tar cpf packedportage.tar portage
复制代码


/etc/fstab中加入

  1. portage         /usr/portage         tmpfs         size=750M        0 0
复制代码

我的portage包括5个overlay的情况下只有610M。
好像tmpfs的容量是灵活的,此时不是内存突然少了750M,这个内出分区的剩余容量其他的应用也是可以使用的。

新建/root/.pack_portage.sh

  1. #!/bin/bash

  2. cd /usr

  3. if test -z "$(mount | grep -F /usr/portage )"
  4. then
  5. mount /usr/portage
  6. fi

  7. if test -f ".portage_unpacked"
  8. then
  9. tar -cpf packedportage.tmp.tar portage
  10. mv packedportage.tar packedportage.tar.old
  11. mv packedportage.tmp.tar packedportage.tar
  12. rm -f /usr/.portage_unpacked
  13. umount /usr/portage
  14. else
  15. ###########
  16. #  for .portage_unpacked losed
  17. umount /usr/portage
  18. mount /usr/portage
  19. ###########
  20. tar xpf packedportage.tar &&\
  21. touch .portage_unpacked
  22. fi
复制代码


  1. chmod +x /root/.pack_portage.sh
复制代码


/usr/.portage_unpacked 是个指示portage是否解压的标记文件。非正常关机时,有可能未删除。在/etc/conf.d/local.start中加入

  1. rm -f /usr/.portage_unpacked
复制代码


每次安装升级程序时,需先运行/root/.pack_portage.sh,会把压缩包packedportage.tar的内容放入tmpfs内,只需6秒钟左右在我的w500上。
升级完成再运行一次/root/.pack_portage.sh会把新的portage打包压缩,并卸载tmpfs。

也可以在/etc/conf.d/local.stop中加入:

  1. if test -f "/usr/.portage_unpacked"
  2. then
  3. /root/.pack_portage.sh
  4. fi
复制代码

这样关机时就会自动更新portage压缩包,关机时间会多几秒钟。这样每次升级或安装只需运行一次/root/.pack_portage.sh。还是挺方便的。

把编译目录也放到内存,fstab中修改如下,我是4G内存,只是在编译gcc等需要的空间较大。2G内存的兄弟,在这设为1500M。如果编译时报空间用完,只需umount,再重新编译,就会在硬盘编译了。gcc编译需要内存较大,还有openoffice(我从来没编译过它)

  1. none    /var/tmp/portage        tmpfs   nr_inodes=6M,size=3500M   0  0
复制代码


再把/tmp也放入内存,/etc/fstab中加入

  1. none    /tmp tmpfs defaults 0 0
复制代码


注意:
1,/usr/.portage_unpacked 是个重要的标记文件。如果内存中/usr/portage目录有问题(比如是空的,被umount了或是缺损),标记文件还存在,运行/root/.pack_portage.sh将会把有问题的portage打包。这时如果想不要/usr/portage中的内容,重新恢复上次备份打包的portage压缩包,只需删除标记文件/usr/.portage_unpacked,再运行/root/.pack_portage.sh即可。
2,最好在别的目录保存一份portage的压缩备份。发生万一时,可拷过来。

还可以把firefox放入内存:
http://forums.gentoo.org/viewtop ... asc-highlight-.html
我的这篇文章也是跟上面这篇学的。
发表于 2010-11-24 17:10:45 | 显示全部楼层
/usr/portage放在内存,下次开机不就没有了?

哦,看明白了,不经常升级,没必要这样折腾吧。
回复 支持 反对

使用道具 举报

发表于 2010-11-24 18:30:41 | 显示全部楼层
Post by Hosanna;2121005
/usr/portage放在内存,下次开机不就没有了?

哦,看明白了,不经常升级,没必要这样折腾吧。


过程是运行该程序时,把portage放到内存,关机/程序执行完时,把portage打包存到硬盘
这个必须内存大才能用,而且portage放在内存里,太占空间,感觉意义不大
倒是可以把firefox,chrome缓存放到tmpfs,速度很快,不伤硬盘
回复 支持 反对

使用道具 举报

发表于 2010-11-24 19:21:39 | 显示全部楼层
把portage放内存感觉肯定拖慢开关机速度,tmp本来就在内存吧……
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-11-24 19:26:49 | 显示全部楼层
Post by yafeng;2121021
把portage放内存感觉肯定拖慢开关机速度,tmp本来就在内存吧……


开机无影响,开机后需手动运行命令加载,升级后再运行一次命令就不会对关机有影响了。

/tmp 用tmpfs是需要设置的。

主要是emerge -avuND world时,硬盘安静很多。
平时,安装软件时,也不需要硬盘狂读portage里的小文件。
回复 支持 反对

使用道具 举报

发表于 2010-11-24 23:33:13 | 显示全部楼层
我是自己写了个初始化脚本保存到/etc/init.d下面,然后用rc-update加到default级别里:
  1. #!/sbin/runscript
  2. depend()
  3. {
  4.         need localmount
  5.         after xdm
  6. }
  7. start()
  8. {
  9.         ebegin "Extracting portage"
  10.         SIZE=$(du -k /usr/portage_new.tar.gz | sed 's/\t.*//')
  11.         if [[ ! -e /usr/portage/header.txt ]]; then
  12.                 if [[ "$SIZE" -lt 50000 ]]; then
  13.                         rm /usr/portage_new.tar.gz
  14.                 else
  15.                         mv /usr/portage_new.tar.gz /usr/portage_old.tar.gz
  16.                 fi
  17.                 tar xpf /usr/portage_old.tar.gz -C /usr/portage
  18.         fi
  19.         eend $?
  20. }
  21. stop()
  22. {
  23.         ebegin "Saving portage"
  24.         if [[ -e /usr/portage/header.txt ]]; then
  25.                 tar -czpf /usr/portage_new.tar.gz -C /usr/portage . --exclude=distfiles/*
  26.         fi
  27.         eend $?
  28. }
  29. restart()
  30. {
  31.         stop
  32.         sleep 3
  33.         start
  34. }
复制代码

每次开机时解压,关机时打包压缩。当然,也是把/usr/portage挂到内存里。空间是会占用一点,df显示是528M,但从free的结果来看只占100多M,4G内存没有压力。用gz压缩对开关机速度也几乎没有影响,实在在乎速度的可以不压缩。
回复 支持 反对

使用道具 举报

发表于 2010-11-25 07:51:32 | 显示全部楼层
基本上是好主意。但要注意觀察每次的update list裡面有没有gcc, chromium, xulrunner, openoffice等需要很大/var/tmp/portage的包。我的4G内存有時候也不太受得了。
回复 支持 反对

使用道具 举报

发表于 2010-11-25 08:05:25 | 显示全部楼层
Post by mathfeel;2121054
基本上是好主意。但要注意觀察每次的update list裡面有没有gcc, chromium, xulrunner, openoffice等需要很大/var/tmp/portage的包。我的4G内存有時候也不太受得了。


我也是4G内存,gcc和xulrunner没有问题,装过几次chromium,也没有问题。编译openoffice时临时文件超过6G,这个是没办法的了,要么装二进制版,要么临时建一个swapfile,不过要注意的是btrfs跟swapfile不兼容。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-11-25 10:34:01 | 显示全部楼层
按我的设置,gcc, chromium, xulrunner 都没有问题,前提是此时别运行其他的内存消耗大的程序(比如运算模拟),运行firefox等大多数程序还是没问题的。openoffice还是用bin
回复 支持 反对

使用道具 举报

发表于 2010-11-25 12:45:56 | 显示全部楼层
我就写了个PORTAGE_TMPDIR="/dev/shm"在make.conf里,没有动portage tree。现在用funtoo,感觉portage同步的时候timestamp sync花的时间长,并且硬盘狂转,大家有什么好方法么?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表