FC2ブログ

PCで: ★絶対に★真似してはいけないPCデータ保全

d-anime_1.pngd-anime_2.png
「十年間アニメを録りためたはあどでぃすくが壊れたとかで」
(dアニメストアテレビCMより)

 アニメのデータはそこにあるかも知れませんが、やはり他のどこにもないデータってありますよね。
 クラウドにバックアップを置く人やそもそもそれをメインにする人も多いでしょうが、それができないこともあるでしょう。例えば、多すぎて容量的にも速度的にも現実的でないとかやっぱり信頼/信用できないとか。
 だから、手元のデータを保護する手段は重要ですし、その手段の最も基本的なのがバックアップ。今回はそのやり方の話です。

 真似してはいけないやり方をどうして書くのか(笑)という問題もありますが、それについては最後に。
 また、個人のPCデータ(なんか表現が重複してますけど)を想定しているので色々抜け(正確さとか)はありますが、そこはそれ。

 まずは、おカネをかけるのは三点。同一規格のHDD沢山と市販のRAID1ユニット、そしてSATAのHDDをUSB3.0に変換するやつ。いやまあHDDでなくSSDでもいいですが、現状その容量で今回の話のようなことをする必要があるともあまり思えないし。
★ 禁止理由その1
 まあ全部かどうかは知りませんが、普通市販のRAIDユニットはこのような用途を想定していません。原則として、ハードウェア障害への対処ですね。

 そのRAIDユニットをどう使うかというと、定期的に(例えば一週間くらいとか)HDDを玉突きするという方法です。具体的には、
  1. PCをシャットダウン(1)
  2. 片方のHDDを出す
  3. PC起動(片肺認識)
  4. PCをシャットダウン(2)
  5. 空いたところに別のHDD入れる
  6. PC起動(オンラインコピー)
  7. 通常運用
という手順を踏みます。要するに、オンラインコピー、つまり運用しながらのHDDコピーをバックアップ作業とするわけですね。
★ 禁止理由その2
 今のHDDのインタフェースは通常SATAですが、これ、50回くらいしか抜き差ししちゃいけないことになっています。だから、こんなことをしているとHDDそのものがハード的に保証できない。
 それなのにやっているのは、むしろ50回で壊れるように作る方が難しいのではないかというのと、今まで大丈夫だったからという最も信頼できない根拠(笑)から。

 上記の手順で「片肺認識」というステップがありますが、これはもしかするとあまり意味ないかも。以前使っていたRAIDユニットがそうやって電気的に認識していたらしいのでやっているのですが、場合によってはもしかするとHDDの中にある管理領域の情報で判断している可能性も。
 どうしてそう思うかというと、今のを購入して程ない頃色々試していたら、コピーが逆に走って頭を抱えたことがあったからです。
★ 禁止理由その3
 普通は内部仕様があまり公開されていない(正式には)ので、おかしな使い方をするとこういう危険があります。

 さて、そんな問題点があるのにソフトRAIDではなくハードウェアを使っているのはどうしていかというと、OSがちゃんと動いていない時にはどうなっちゃうの?という問題があるからです。
 が他にも、要するに書き込みが二倍発生するというのと、メタデータがどうなっているかよく知らないのでもしかするとそのHDDは別環境でちゃんと読めるの?みたいな心配があるからです。単なるHDDとして見たいのに勝手にRAIDの片割と認識されても困る。
 ちなみに、書き込みが単純に二倍発生するかどうかはよく知りません。SATAのプロトコルにうまい仕組みがあってそれを使ってる可能性もありますが。ネットでいうマルチキャストみたいな。

 さて、禁止理由その3への対処として、上記の手順の「PC起動(片肺認識)」のところで小細工をします。
 そこで登場するのが、SATAをUSB3.0に変換するインタフェース。これから入れるHDD(コピー先)の管理領域をクリアします。
★ 禁止理由その4
 管理領域についての情報は全くの推測というか推量というか憶測というか妄想にすぎません。

 何を根拠にそんなことをしているかというと、OSから見えるHDDのサイズです。具体的に言うと、まあ私が使っているのはLinuxなので
sfdisk -s /dev/sda
みたいに。HDDを素でつないだ時よりもRAID組んだ時の方が小さく見え、またHDDの最初の方はそのまま同じように見えているので後ろの方に何か書いてあるのだろう、と。
 というわけで、「PC起動(片肺認識)」のところではSystemRescueCdで起動し、それに仕込んだ自作のシェルスクリプトを走らせます。本エントリの最後に書いてあるやつ。これは要するに、RAIDになると見えなくなる部分に何かあるだろうからそこを0クリアするというそんだけのものです。
 まあ、そもそも真似してはいけない方法なのでスクリプトも詳しくは解説しません(笑)。

 さて、それでは冒頭に書いた、その「真似してはいけない」ような悪手をどうして私が使っているのかというと、まあ簡単に言うと、障害対応ではなくバックアップを主目的としたRAIDユニット欲しいな、誰か作ってくれないかな、と。いやまあもうどこかにあればそれが一番ですけど。

 というわけで、禁止理由「その1」については、主眼の置き場所をバックアップに変更したRAIDユニットがあれば問題ないわけで。
 次に「その2」は、HDD側はもうしょうがないので、何かアダプタを嵌めて抜き差しできるようにすれば。それも安価なのが欲しい。アダプタは「通常SATA-強化版SATA」だと何だか高くなりそうですがそのままのHDDも嵌められるメリットがありますし、例えば「通常SATA-eSATA」とかにすれば新しい規格考えなくていいけど電源を考えるとやはりそう簡単ではなさそうだし、さてどうするのが良いか。
 理由の「その3」「その4」については、オンラインコピーの方向を明確に表示してくれれば間違えることもないしいいかな、と。

 以上、何かを紹介するようでいて実は要望を書いたエントリでした。

P.S.
 ちなみに、HDD単位の履歴以外にもファイルシステム単位でのソフト的なバックアップ、というかスナップショットも用いていたりします。スナップショットが使えるFSもいくつかありますが、私はNILFS2を使っています。これは、過去の状態を後からスナップショットにできるから。
 でも、その理由で選んではいますが実は他のFSでもそれできたりして。なんせ、ちゃんと調べないで使い始めちゃったから。
 ……なんかこんなんばっかり(笑)。

 あと、上記のスクリプト↓。
#!/bin/bash

declare -r raidsize_2930266584=2930212864
declare -r raidsize_1953514584=1953464320
declare -r bs=1024

command=echo
while getopts 'x' c
do
case "$c" in
x) command= ;;
*) exit 1 ;;
esac
done
shift "$(($OPTIND - 1))"

timeoutval="$(cat /sys/module/usbcore/parameters/initial_descriptor_timeout)"
if [ "$command" ]; then
echo "=== Dry-run mode"
else
echo "*** WRITE MODE ***"
echo -n 20000 > /sys/module/usbcore/parameters/initial_descriptor_timeout
fi
echo

for i in "$@"; do
if [ "${i#*/}" = "$i" ]; then i="/dev/$i"; fi
blocks="$(sfdisk -s "$i" 2> /dev/null)"
if [ $? -ne 0 ]; then echo "$i: Error" 1>&2; continue; fi
echo "$i: $blocks blocks"
eval "raidsize=\$raidsize_$blocks"
if [ -z "$raidsize" ]; then echo "$i: Skip (no match)"; continue; fi
cmd=($command dd bs="$bs" seek="$raidsize" if=/dev/zero of="$i")
echo ">>> ${cmd[@]}"
echo -n 'Ok (y/N)?> '
read ans
if [ "$ans" = 'y' -o "$ans" = 'Y' ]; then
"${cmd[@]}"
fi
done
if [ -z "$command" ]; then
sync; sync; sync
if [ "$timeoutval" ]; then
echo -n "$timeoutval" > /sys/module/usbcore/parameters/initial_descriptor_timeout
fi
fi

コメント

非公開コメント

プロフィール

水響俊二

Author:水響俊二
水響 俊二 [MIZUKI Shunji]

暫定的に、18禁作品の感想などは裏サイトで書いています。
   

最新記事
最新コメント
カテゴリ
検索フォーム
リンク
RSSリンクの表示
月別アーカイブ
アクセス解析中