2010年9月15日水曜日

ファイル編集前の簡易バックアップ

Linuxの設定ファイルなどを編集する際に、編集前のファイルのバックアップを取って置きたいことがある。設定をしくじったりした場合に、元の設定に戻したいからだ。

私は、そのために、次のようなシェルコマンドを自作して利用している。

以下の内容で、~/.functionsを作成する。

bk ()
{
    file=${1##*/};
    dir=${1%${1##*/}};
    ( if [ "$dir" = "" ]; then
        true;
    else
        if [ -d "$dir" ]; then
            echo cd $dir;
            cd $dir;
        else
            echo "No such directory: $dir ";
            return 1;
        fi;
    fi;
    if [ -f "$file" ]; then
        mkdir -p .bk;
        echo cp -p $file .bk/$file.$(date +"%Y%m%d%H%M" -r $file);
        cp -p $file .bk/$file.$(date +"%Y%m%d%H%M" -r $file);
    else
        echo "No such file: $file ";
    fi )
}

この関数は、以下のような動作をするものである。
  • バックアップを取りたいファイルが存在するディレクトリに.bk/とサブディレクトリを作成する。
  • ファイルの最終変更日時(mtime)をサフィックスにもつコピーを作成する。
使用例
ktaka@hana:~$ . ~/.functions
ktaka@hana:~$ ls -la /home/ktaka/hello
-rw-r--r-- 1 ktaka ktaka 1048576000 May 27  2009 /home/ktaka/hello
ktaka@hana:~$ bk /home/ktaka/hello
cd /home/ktaka/
cp -p hello .bk/hello.200905270208
ktaka@hana:~$ ls -la /home/ktaka/.bk/hello.200905270208
-rw-r--r-- 1 ktaka ktaka 1048576000 May 27  2009 /home/ktaka/.bk/hello.200905270208
 ファイルの更新時をサフィックスに持つので、複数のバックアップファイルが存在する場合でも便利である。

~/.bashrcで.functionsを読み込むようにしておくと良い。
if [ -f ~/.functions ]; then
        . ~/.functions
fi

2010年1月16日土曜日

i3200でedacを使うには、カーネルを2.6.32にしなければならない。

メモリが壊れているかな?

BIOSより、DMIログを覗いてみると。。。

Phoenix cME FirstBIOS Pro Setup Utility
Advanced
+---------+----------------------------------------------------------+---------+
| | DMI Event Log | Help |
|---------|----------------------------------------------------------|---------|
| | | |
| Event | 01/16/2010 14:44:12 Pre-Boot Error: ^ |ts of |
| Event | Keyboard Not Functional . |og. |
| | . | |
| View D| 01/16/2010 14:44:46 Single-Bit ECC Errors in DIMM# . | |
| Event | 01/16/2010 14:45:45 Single-Bit ECC Errors in DIMM# . | |
| | 01/16/2010 14:45:45 Pre-Boot Error: : | |
| Mark D| Keyboard Not Functional : | |
| Clear | : | |
| | 01/16/2010 14:46:28 Single-Bit ECC Errors in DIMM# : | |
| | 01/16/2010 14:47:00 Single-Bit ECC Errors in DIMM# : | |
| | 01/16/2010 14:47:00 Pre-Boot Error: : | |
| | Keyboard Not Functional . | |
| | | |
| | [Continue] | |
| +----------------------------------------------------------+ |
| | |
+------------------------------------------------------------------------------
せっかくなので、linuxのedacで検出してみる。

i3200でedacを使うには、カーネルを2.6.32にしなければならない。
ずっと前からコードはあったので、とっくにマージされていたと思っていました。

モジュールはこれ
lenny64:~# lsmod |grep edac
i3200_edac 3599 0
エラー出力
lenny64:~# dmesg |tail
EDAC DEBUG: i3200_check: MC0: i3200_check()
EDAC MC0: CE page 0x0, offset 0x0, grain 1073741824, syndrome 0x54, row 1, channel 0, label "": i3200 CE
EDAC DEBUG: i3200_check: MC0: i3200_check()
EDAC MC0: CE page 0x0, offset 0x0, grain 1073741824, syndrome 0x54, row 1, channel 0, label "": i3200 CE
EDAC DEBUG: i3200_check: MC0: i3200_check()
EDAC MC0: CE page 0x0, offset 0x0, grain 1073741824, syndrome 0x54, row 1, channel 0, label "": i3200 CE
EDAC DEBUG: i3200_check: MC0: i3200_check()
EDAC MC0: CE page 0x0, offset 0x0, grain 1073741824, syndrome 0x54, row 1, channel 0, label "": i3200 CE
EDAC DEBUG: i3200_check: MC0: i3200_check()
EDAC MC0: CE page 0x0, offset 0x0, grain 1073741824, syndrome 0x54, row 1, channel 0, label "": i3200 CE