2011年7月18日月曜日

sosreport の出力先ディレクトリを変更する方法

sosreport は Python で記述されており、デフォルトでは出力先ディレクトリは /tmp になっていますが、変更することも可能です。※2011-07-24追記、バージョンにより指定方法が違うので最後まで読んでください。TMPDIR が使えるのは sos-1.7-9.49.el5 以下までです。
/usr/lib/python2.?/site-packages/sos/policyredhat.py を見ますと、gettempdir() が使われています。
...
    def packageResults(self):

        if len(self.ticketNumber):
            namestr = self.reportName + "." + self.ticketNumber
        else:
            namestr = self.reportName

        ourtempdir = gettempdir()
        tarballName = os.path.join(ourtempdir,  "sosreport-" + namestr + ".tar.bz2")
...
この gettempdir() は、環境変数 TMPDIR を参照してくれるので、sosreport の実行前に、TMPDIR に出力させたい場所を指定すれば良いです。
# export TMPDIR=/home
# sosreport -k rpm.rpmva=off
...

Creating compressed archive...

Your sosreport has been generated and saved in:
  /home/sosreport-xxx-435993-d02afb.tar.bz2
/tmp の空きが少なくて、別の領域(別のパーティション)へ出力したい場面で役立つものと思います。

2011-07-24追記
RHEL5.7 のテクニカルノートを読んだら、最新の sos では、--tmp-dir オプションが追加されているようです。
http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/5/html/5.7_Technical_Notes/sos.html
* Prior to this update, the user could not change the target location for storing sos reports. Due to this, sos reports were not collected if the /tmp/ directory was full. This update adds the "--tmp-dir" option to the sosreport utility to allow the user to specify the target directory. (BZ#562283)
ソースを読んでみると、gettempdir() が呼び出されなくなってしまっています。┐( ̄ヘ ̄)┌
...
    def packageResults(self):

        if len(self.ticketNumber):
            namestr = self.reportName + "." + self.ticketNumber
        else:
            namestr = self.reportName

        ourtempdir = self.cInfo['dstrootparent']
        tarballName = "sosreport-" + namestr + ".tar.bz2"
...
めんどくさい状況を作ってくれるもんだな。。。

2011-12-21追記
1.7-9.54.el5_7.1 で、また TMPDIR が使えるようになったようです。
ChangeLog から抜粋。
* Thu Nov 24 2011 Bryn M. Reeves  - 1.7-9.54.el5_7.1
- Fix handling of TMP environment variable
Resolves: bz748804
このBugzillaは非公開でした。

2011年7月16日土曜日

ファイルをスパース(sparse)化する方法

主に、Linux のクラッシュダンプファイル、または、プロセスのコアファイルを、誰かから送付してもらった場合、本来スパースファイルであるものが、送付方法によっては非スパース化してしまって、ディスクを浪費してしまう場合があります。
そんな局面で、スパースファイルに戻す方法です。
# dd if=/dev/zero of=test.dd bs=4096 count=1000    ※実験のためオールゼロファイル作成
1000+0 records in
1000+0 records out
4096000 bytes (4.1 MB) copied, 0.092697 seconds, 44.2 MB/s

# du -hs test.dd 
4.0M    test.dd

# cp -p --sparse=always test.dd test.dd.sparsed

# du -hs test.dd.sparsed    ※確認
0       test.dd.sparsed
書くまでもないですが、圧縮形式の vmcore には効果が無いですから、上記の操作でディスク節約を試みる前に、file コマンドで形式を確認したほうがいいです。
# file vmcore 
vmcore: data    ※これだったらダメ
なお、逆に誰かにダンプやコアファイルを送付する場合は、次のように tar の S オプションをつけてセーブすると親切です。親切かどうかチェック(相手のレベルをチェック)してたりします。(^ー^;>
# tar zcfS vmcore.tgz ./127.0.0.1-2010-08-31-23:27:08/vmcore
./127.0.0.1-2010-08-31-23:27:08/ の部分も小さな親切になります。

2011-11-27追記
カーネルのクラッシュダンプや core 以外にも、KVM などの仮想マシンで使う仮想ディスクファイルもスパースなので、上記方法が役に立つ (応用できる) 場合があるかと思います。
次のURLの方のように、仮想マシン上からゼロ書き込み後に cp --sparse=always でスパース化処理すれば、理論上は仮想ディスクファイルが縮小できる場合があるはず。
http://www.syuhitu.org/other/skipspace/skipspace.html

2011年7月9日土曜日

yum でローカルリポジトリを指定する方法

ネットで簡単に出て来そうな内容ですが、自分用のメモ。

/etc/yum.repos.d/local.repo を、次の内容で作る。
[local]
name=local
baseurl=file:///mnt_cdrom/
enabled=0
gpgcheck=0
/mnt_cdrom に、ISO イメージをマウントして、そこから追加インストールなどなど。
[root@centos6 ~]# yum install lftp --disablerepo=* --enablerepo=local
Loaded plugins: fastestmirror, refresh-packagekit
Loading mirror speeds from cached hostfile
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package lftp.x86_64 0:4.0.9-1.el6 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

==========================================================================================
 Package           Arch                Version                   Repository          Size
==========================================================================================
Installing:
 lftp              x86_64              4.0.9-1.el6               local              753 k

Transaction Summary
==========================================================================================
Install       1 Package(s)
Upgrade       0 Package(s)

Total download size: 753 k
Installed size: 2.5 M
Is this ok [y/N]:
CentOS 6 の yum リポジトリはまだ使えないので、とりあえず上記のように対応・・・
人気ブログランキングへ にほんブログ村 IT技術ブログへ