お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2009-12-06 05:00:50

kj
メンバ
登録日: 2006-12-14

tmpfsのバックアップ

ubuntu9.10を利用しているのですが、tmpfsに置いているデータのバックアップに関してご教授いただけないでしょうか。

先日tmpfsの存在を知り、平たく言うと「ラムディスク」であると理解しました。読み書きがとても早いので活用していきたいのですが、シャットダウン(ログオフ?)するとデータが消えますので「シャットダウン時にバックアップを取り、スタートアップ時に復元」という作業の自動化を目指しています。

/etc/rc.localに記述したコマンドはスタート時に実行されるということはわかったのですが、シャットダウン時に実行するコマンドを記述するような設定ファイルはあるのでしょうか?
windowsでいうところのログオフスクリプトのような機能はないものかと、あぐねています。

また、tmpfsがアンマウントされるタイミングよりも前に確実にバックアップ処理を走らせるという点も課題なのかなぁ、と想像しています。

オフライン

 

#2 2009-12-06 13:57:29

yama
メンバ
登録日: 2006-10-23

Re: tmpfsのバックアップ

回答じゃないんですが、わざわざそのような面倒くさい事をする理由はなんでしょうか?
というのも昨今のPCなら普通に使っているだけで十分に高速だと思いますので。
ラムディスク的な使い方は便利ですが、不意の停電で中身は消失してしまいます。
特殊なハード環境ならばいざ知らず。

オフライン

 

#3 2009-12-08 12:29:24

ack
メンバ
登録日: 2007-06-01

Re: tmpfsのバックアップ

9.10ですので、rc.localではなくUpstartを使った方法を試してみましたのでご紹介致します。
以下すべて管理者権限での操作となります。

/etc/init/ ディレクトリに ~.conf という名前で設定ファイルを書きます。
例えば、/etc/init/myramdisk.conf としてみます。

Upstartは本来各種システムサービスのアプリを起動するものですが、設定ファイル中、
pre-start script ~ end script
post-stop script ~ end script
の間にそれぞれサービスアプリ開始前/終了後のタイミングで、root権限で動作するシェルスクリプトを
書くことが出来る(本来はサービスの事前準備や片付け用?)ので、それを利用して
このような形にしてみました。

※以下普段のユーザ名を ack としています。

コード:

# myramdisk.conf

description    "My tmpfs RamDisk"

start on runlevel [2345]
stop on runlevel [!2345]

console output

pre-start script
    if [ ! -d /mnt/ramdisk ];then
        mkdir /mnt/ramdisk
    fi

    if [ ! -d /home/ack/ramdisk/ ];then
        mkdir /home/ack/ramdisk/
    fi

    mount -t tmpfs -o size=64m /dev/shm /mnt/ramdisk
    chmod a+rw /mnt/ramdisk
    rsync -a /home/ack/ramdisk/ /mnt/ramdisk
end script

post-stop script
    rsync -a /mnt/ramdisk/ /home/ack/ramdisk
    umount /mnt/ramdisk
end script

# スクリプトの中身が大変ヒドいですが参考というこでご容赦下さい・・・

これで myramdisk サービスが出来たので、
(ランレベル2~5の)システム起動時、または sudo initctl start ramkdisk の実行で
・/mnt/ramdisk /home/ack/ramdisk/ ディレクトリがあるか調べ、なければ作り、
・64MBの tmpfs を /mnt/ramdisk にマウントし、
・/mnt/ramdisk を誰でも読み書きできるようにし、
・/home/ack/ramdisk の中身を /mnt/ramdisk にコピー
を行い、
システム終了時、または sudo initctl stop ramkdisk の実行で
・/mnt/ramdisk の中身を /home/ack/ramdisk にコピーし、
・/mnt/ramdisk をアンマウント

します。

上記も一応動作しますが、あくまで例という事で(例えば本来tmpfsマウントは
fstabとかでやった方がよいと思う)、お使いの環境に合わせてカスタマイズして行って下さい。

kj による投稿:

また、tmpfsがアンマウントされるタイミングよりも前に確実にバックアップ処理を走らせるという点も課題なのかなぁ、と想像しています

Upstartはサービス起動/終了時の依存関係をいろいろ設定する事が出来るらしいので、
tmpfs の中身を書き出すタイミングを明示することも可能と思います。

オフライン

 

#4 2009-12-11 20:33:48

kj
メンバ
登録日: 2006-12-14

Re: tmpfsのバックアップ

yamaさん
面倒なことをする理由は?ということですが、少しでも速くなるならそれに越したことはないと考えています。最近はフリーズも停電もめったにありませんので、私の利用状況とリスクを勘案するとtmpfsは実用にたえると判断しました。とはいえ、いざというときの後悔を軽減するために、テンポラリー的なデータや再現可能なデータ(ネットでダウンロードしたデータ等)の置き場として利用します。
あとは、、、興味です。実際のところこれが一番の理由かもしれません。設定ファイルをいじったりするのは初心者ながら楽しいと感じていますので。
ありがとうございました。


ackさん
わざわざスクリプトまで書いていただき、またコードの解説もありがとうございます。掲載して頂いたスクリプトが本当にひどいのかご謙遜されているのか、私には分かりませんが。。使わせていただきます。
tmpfsのマウントはfstabに記述するべきとのご指摘ですが、この場合は「アンマウント前にバックアップを走らせるには?」という課題が残ります。これについては自分で調査&実験してみます。
調べているうちに知ったのですが、「/etc/rc2.d/S~~」は起動時に、「/etc/rc2.d/K~~」は終了時に実行されるそうです。「/etc/init/~~.conf」でも実現できるということで少し戸惑っていますが、各設定ファイルをどのように運用すべきかといったポリシーを今後学習していきます。
ありがとうございました。

オフライン

 

Board footer

Powered by FluxBB