たまに18歳未満の人や心臓の弱い人にはお勧めできない情報が含まれることもあるかもしれない、甘くなくて酸っぱくてしょっぱいチラシの裏。RSSによる簡単な更新情報を利用したりすると、ハッピーになるかも知れませんしそうでないかも知れません。
の動向はもえじら組ブログで。
宣伝。日経LinuxにてLinuxの基礎?を紹介する漫画「シス管系女子」を連載させていただいています。 以下の特設サイトにて、単行本まんがでわかるLinux シス管系女子の試し読みが可能!
旧題:robocopyとcygwinとタスクスケジューラでWindows Vistaを3世代バックアップのまとめ。
Vistaの標準コマンドのrobocopyでシンボリックリンクを除外してミラーリングできることが分かったってことで、とりあえずこんな風にしてみた。前提は以下の通り。
シェルスクリプトはこう。
#!/bin/sh
# 日付を含んだ名前のフォルダにする
destdirname=backup`date +%Y-%m-%d_%H-%M-%S`
destparentdir=/cygdrive/z
# robocopyに渡すためのWindows形式のパス。(ひょっとして不要?)
destparentdir_win=z:\\
# 最終更新日が一番古いフォルダの名前を取得する。
cd ${destparentdir}
targetdirname=`ls backup* -drt | grep -m1 "^backup"`
# で、それを日付を含んだ名前に変える。
mv "./${targetdirname}" "./${destdirname}"
destdir=${destparentdir}/${destdirname}
destdir_win=${destparentdir_win}\\${destdirname}
echo "backup to ${destdir_win}"
# Cドライブバックアップ用のフォルダがなければ作成。
# (後から他のドライブのバックアップも取りたくなった時のため)
if [ -d "$destdir/c" ]
then
echo "old backup exists"
else
mkdir "$destdir/c"
fi
# 古いログを削除。
rm ${destdir}/log.txt
# robocopyでミラーリング。
# * シンボリックリンクは除外(/XJD、/XJF)
# * リトライはしない
# * ログをファイルに出力
robocopy /MIR /ZB /SEC /SECFIX /XJD /XJF /R:0 /LOG:${destdir_win}\\log.txt "c:\\" "${destdir_win}\\c\\"
exit
シェルスクリプトは改行コードをLFにしとかないとbashがエラーを起こすので、気をつけないといけない。いつもそれを忘れてミスる。
で、タスクスケジューラで時々走らせる(bash.exeの引数にスクリプトを渡す)。とりあえずテストって事で3日に1回やってみよう。バックアップ間隔は後で変えるかも。期待通りに動いてるかどうか、後日要チェックだ。
追記。ちょっとスクリプトを修正した。よく考えたらフォルダ名自体を日付にしとけばもっとわかりやすかった……
追記。っつーかそもそもVistaには標準で便利なバックアップ機能があるんですね。知らんかった(マヌケ)。しかし一番魅力的なComplete PCバックアップはHome Premiumには無くてBusiness以上のみ……Home Premiumで使えるバックアップ機能の範囲ではレジストリ等はバックアップできないみたいだし、シャドウコピーも無理みたいだし、もうこれでいいかなあ。つまり、このエントリの内容は「Windows Vista Home Premium以下のエディションでうそっこシャドウコピーとうそっこComplete PCバックアップを<ruby><rb>無料</rb><rt class="読み">タダ</rt></ruby>で実現してみよう」という内容に相当するわけか?→ということでタイトル変えてみた。
2020年1月7日追記。ここから10年が経過した現在は、Windowsのバッチファイルを使わずにrsyncを使っています。重要なのは以下の2点です。
/mnt/c/
配下の任意のディレクトリをQNAPに同期するWSLって何?という方はまんがでわかるWSLあたりをご参照下さい。
robocopyでいけるかも、と書いたけど、全然駄目だった。ある程度まではうまくいくんだけど、途中からログに新しいディレクトリ 190 c:\Documents and Settings\ユーザ名\AppData\Local\Application Data\Application Data\Application Data\Application Data\Temp\Temp6_python24.zip\みたいに出て、再帰っていうか無限ループに陥ってしまう。
ていうかエクスプローラでCのルートとか見てもこんな名前のフォルダは存在しないのに!と思ったけど、「もしや」と思ってフォルダオプションで「保護されたオペレーティングシステムファイルを表示しない」のチェックを外してみたら、出現した。C:\Documents and Settings は C:\Users へのシンボリックリンクで、C:\Users\ユーザ名\AppData\Local\Application Data は C:\Users\ユーザ名\AppData\Local へのシンボリックリンク(Windows Vistaでは過去のアプリケーションとの互換性のためにシンボリックリンクを用意している、という話をそういえば過去に聞いたことがあった。隠しファイルになってるとは思ってもみなかった。)……ということで延々同じ所をスキャンしてたようだ。
検索してみたら似たようなトラブルが起こってるらしい人がいたけど、ちょっと現象が違うみたいで、あまり参考にならなかった……
なんとか回避できないものだろうかと思ってrobocopy /?でオプション一覧を眺めてたら、こんなオプションがあることに気付いた。
/XJD :: ディレクトリの接合ポイントを除外します。 /XJF :: ファイルの接合ポイントを除外します。
そういえばNTFSのシンボリックリンクは本当は「ジャンクション」って名前だってどっかで聞いたなあ、ということはXJDはExclude Junction Directoryの略だろうか? つまりシンボリックリンクを無視するオプションだったりするんだろうか?と思ったので、とりあえずこの2つを引数に加えてもう一度試してみてる。うまくいったらまたここに書くつもり。
……どうやらうまくいったみたいだ。さっきまで詰まってた所を通過して、これまでコピーされてなかったファイルのコピーが始まった。
ちなみに、使ったのはこんな感じの指定です。
robocopy /E /ZB /R:0 /LOG:z:\log.txt /XJD /XJF "c:\" "z:\c\"
あとは世代別バックアップの方法を考えないと。
追記。無事終わったぽ。現段階で170GB弱。4世代くらい取れるか?
バックアップA→バックアップB→バックアップC→バックアップAを差分更新(ミラーリング)→バックアップBを差分更新(ミラーリング) という感じで回していけば、全部丸ごとバックアップよりも負荷が少なく済みそうだけど……こういうのってどうやればいいんだろ。とりあえず現状既にCygwinのbash用シェルスクリプトにしてはいるので、ボチボチ考えよう。
2020年1月7日追記。ここから10年が経過した現在は、Windowsのバッチファイルを使わずにrsyncを使っています。重要なのは以下の2点です。
/mnt/c/
配下の任意のディレクトリをQNAPに同期するWSLって何?という方はまんがでわかるWSLあたりをご参照下さい。
なんかうまい事よろしくやってくれるバッチファイルを作ってタスクマネージャで時々走らせる、という計画。
C:\Users以下全部を圧縮して……とかやろうとするとファイルサイズ制限なのか何なのか無理みたいなので、xcopyでファイルコピーするようなバッチファイルを書こうと思ってオプションを調べるためにコマンドラインでxcopy /?と入力したら、xcopyは非推奨だよrobocopy使いなさいとメッセージが出た。
何それ? と思って検索したら、過去のWindowsではリソースキットで提供されていてWindows Vista以降で標準コマンドに含まれるようになったより高機能なファイルコピーコマンドみたい。
オプションを見ると、ミラーリングのための機能(ローカルで消えてるファイルをリモートでも消すとか)が充実してる。しかし今回やりたいのは複数世代バックアップなんですよねー。それをやろうとするとやはりバッチファイルかCygwin用のシェルスクリプトで頑張らないといけないか。
須藤さんのマシンのビデオカード(AGP)の調子が悪くなったらしく、どうせ使えないんだったらってことで、こっちの旧マシンのビデオカード(足永さんから借りた)を渡した。しかし、旧マシンのHDDのエラーを直せたのでほんじゃあいっちょ設定の類を救出してみようか、と思っても、AGPのビデオカードがなければ手も足も出ない。でも須藤さんはもう僕が使ってたAGPのカードを使ってる。仕方がないので須藤さんがこれまで使ってたという調子の悪いらしいビデオカードを借りてみたけど、起動ドライブの認識中とかWindows 2000の起動中とかそんなタイミングで固まってしまうので、お話にならない。
時代はRAID1ミラーリングより複数世代自動バックアップだよね!(?)ということで、1TBのSATA HDDを買った。物理的に同じ場所に設置したんじゃバックアップの意味ねえよとか、やるんなら地震の少ない土地にデータセンター作って毎日テープメディアでバックアップ取るくらいしないとバックアップとは呼べねえなとか、いろいろ議論はあるだろうけど。
Cygwinを入れたりFTP関係のアプリを救出したりして、アドオンの更新くらいはできるようになった。でもATOKや秀丸エディタの設定はまだ取り出せてないので、いつものようにいかなくてストレスが溜まる。
ストレスといえば、キーボード周りも地味なストレスがある。PS/2→USBの変換コネクタ(ArvelのAU02PS)を挟んで旧キーボードを使うようにしたんだけど、コントロールパネルでキーリピートがかかるまでの時間を一番短く設定しても、今までに比べてワンテンポ遅れてやっとリピートが始まる(Shift-Aだとすぐリピートがかかるのに……)。Windowsキーも認識されない。今更知ったけど、この手の変換コネクタとキーボードとの組み合わせには結構相性があるようで……もう買い換えるしかないんかなあ。
あと、愛用してたLR-Menuととある壁紙チェンジャーがどちらもVistaではウンともスンとも動かなくて困った。壁紙チェンジャーは類似ソフトが外にもあるからいいけど、LR-Menuは代替できる物がなくてほんとに困る。
と思ってたら、LR-MenuをWindows XPで動かすときの注意というのが見つかった。すでに消えてしまった作者さんのサイトでの情報によると、動作しなくなったのではなく、デスクトップ領域の内部名がWindows XP以降で変わったせいで左右同時クリックが無視されていただけで、Ctrl-F12で強制的にメニューを出して設定でデスクトップ領域のウィンドウを左右同時クリックの許可対象に加えてやれば動くようになるという。Vistaでもそうなのだろうか? と思ってダメ元で試してみたら、うまくいった。よかった。
というわけで宇宙人探し再開なのだわ。
LimeChat2は新環境だとHome以下のAppData\Roaming\LimeChat2\の方に設定ができてて、Program Files\LimeChat2\users\の物が読み込まれなくて最初焦った。設定ファイルをAppDataの方に移動したらちゃんと読み込まれた。
GoogleデスクトップはほとんどGoogleカレンダーガジェットのためだけに導入した。
OpenOffice.org 3.0.1も入れた。すげえ……1年分の家計簿を読み込ませてもあっという間に行の高さとかの計算が終わる……!
マウスのポインタの下にあるスクロール領域にフォーカスが無い時でも直接ホイールでスクロールさせる、という動作を実現するために、今まではWheelRedirectorを使ってたんだけど、ぴたすちおに乗り換えてみた。WinRoll 2.0でウィンドウシェードしようとすると右クリック時にいちいちコンテキストメニューが出てうざいので、代替になるものを探しててこれに行き着いた。で、ぴたすちおにWheelRedirector相当の機能が含まれてたので、一本化してみるか、と。ぴたすちおだとエクスプローラのウィンドウとかがちゃんとロールアップされなくてちょっとアレなんだけど、Aeroでエクスプローラのウィンドウのタイトルバーだけにすると何がなんだかわけがわからなくなるので、これはこれで仕方ないのかな……
あとTortoiseSVN。なぜかというと、普段使いの環境で使ってる自作アドオンはjarで固める前のファイル(=Subversionリポジトリからチェックアウトしたままのファイル)をそのまま読み込ませてるから。
他はまだ全然進んでない。エディタもメーラも。お絵描きソフトなんてまだまだ先……っていうかそもそもVistaだとIllustrator CS2はまともに動かないから、そのうちCS3か4を買わなきゃいけない。
とりあえずこのいまいち使いにくいDellキーボードをとっとと元のPS/2キーボードに変えたい。変換ケーブルは注文済みなのでそれ待ち。
それにしても新マシンは速いなあ。あれだけテキストリンクの処理速度の事で悩んでたのが馬鹿馬鹿しくなる。
救出したデータのうちiTunesのライブラリを新マシンの C:\Users\<username>\Music\iTunes に移動してiTunesを起動したところ、一部の(数としては大量の)曲について、ファイルが見つからないと言われてしまった。
iTunes導入後(=iPod導入後)にCDを買った物とかはiTunesでリッピングしてそのままライブラリ行きだったので、それらについてはちゃんと認識されてるっぽい。駄目だったのは、それ以前にリッピングしてMP3化して別の場所に置いてあった物をインポートしたやつ。旧マシンではこれらはDドライブのフォルダの中に入れてたんだけど、救出した後は C:\Users\Public 以下に置くようにしたため、リンク切れ状態になってしまった。
iTunesのライブラリをエクスプローラで開くとiTunes Music Library.xmlというファイルがあって、これをメモ帳で開くとそれっぽい情報が色々書かれているので、一括置換でlocalhost/D:/となってるところをlocalhost/C:/Users/Public/に置き換えて上書き保存してみた。しかしiTunesを起動して再生を試みてもやはりファイルが見つからないと言われる。iTunes終了後にもう一度iTunes Musc Library.xmlを開いてみたら、さっき置換したはずの所が全部元に戻ってしまっていた。どうも、ほんとの情報はiTunes Library.itlあたりにバイナリとして保存されてて、iTunes Music Library.xmlの方をいくらいじっても無駄みたいだ。
「iTunes 場所 変更 xml」で検索してみたら、63Blog: フォルダ名変更の時のiTunes再構築方法 というエントリが引っかかった。
という風にするといいらしい。実際、試してみたらうまくいった。プレイリストに入ってないけど管理下にはあった曲、というやつもちゃんと認識されたっぽい。iTunes Storeで買った曲が入る「購入したもの」も復元された。
リンク作成シェル拡張で作ったシンボリックリンク(うちの場合はフォルダのリンクなので、正確にはジャンクション?)があると、ファイルのコピーが途中で止まってしまう……
かつてWindows 2000でCドライブとDドライブだった物が、今FドライブとGドライブとして認識されてるんだけど、この状態でフォルダのリンクを含むフォルダ群をVista上で普通にコピーしようとすると、リンク切れ状態のリンクを処理しようとして詰まってそこで後のファイルのコピーも全部キャンセルされてしまう。仕方がないので、先にFとGからリンクの残骸を探して削除して回ってからコピーをやり直してみてるけど、見落とした物があるとまたそこでやり直しなのでうんざりだ。
関係ないけど、Vistaのファイル移動やコピー時の上書き確認関係のダイアログは、なかなかよくできてるっていうか丁寧だなと思う。「どういう操作を選ぶか」じゃなくて「結果的にどうしたいのか」を提示してる、というかなんというか。
これでやっと復旧?にとりかかれる。
買ったのはDellのStudioとかいうモデルで、XPは選択できなかったのでVista Home Premiumになった。メモリ4GB、HDD500GBとかこの辺はプリセットの構成のままで、グラフィックボードをデュアルディスプレイ構成で使えるようにnVIDIA GeForce 9800 GTにして、あとブルーレイコンボドライブも付けた。ディスプレイ無しで11万ちょっと。
最近のマシンはPS/2なんて付いてないんですね……なにげに気に入ってたTK-P09FPBKが使えなくてしょんぼり。でもググってみたらUSB→PS/2というマウスとかによく付いてきてた奴だけじゃなくて、その逆のPS/2→USBというのもあるのか。これ使えばいけるかな?
せっかくブルーレイが付いたんだからって事で、前に買うだけ買って再生環境が無くて死蔵してたマクロスFの1巻を再生してみようとしたんだけど、HDCPがどうとか言われて再生できない……ディスプレイがHDCPという仕様に対応してないとHD画質のコンテンツは見れませんよっていう話らしい。今の構成は、新しく買ったPCにDVI-I端子経由でEizo FlexScan S170とViewSonic ViewPanel VE150を繋いでるんだけど、どっちも古くてそんな仕様には対応してないから、ブルーレイは禁止!ということらしい。なんじゃそらー。ディスプレイ買い換えるつもり無かったのにそんなこと言われても困るよ。
さらにもう少し調べてみたら、HDCPはコピーガード(コピーの時に働く機能)じゃなくてアクセスコントロール(ただ再生するだけの時にも働く機能)だから回避しても法的には問題がないという話もあるようだ。
さらにもうちょっと調べてみたらAnyDVD HDというシェアウェア(21日間の試用期限あり)を使うと、ソフトウェア的にHDCPを回避できるようになるとか。で実際試してみたら、確かに再生できた。ただ、AnyDVD HDの問題なのかPowerDVD 8.1の問題なのか、普通にディスクを入れてすぐに再生が始まるパートは再生できるんだけど、ディスクメニューから映像特典を見ようとすると止まってしまう。結局全然駄目ってことなのか……
遊んでないでシステム復旧に取りかかれって話ですよね。はい。
旧マシンはオンボードのSATAが無かったので手も足も出なかったけど、新マシンはSATA標準搭載(というかそれしか付いてない)なので、ここにRAID1のうち片方のディスクだけ繋いでみた。Windows Vistaの起動前に何かメッセージが出て、CHKDSKによるエラーチェックが始まって……うわあ、何かすごい量のメッセージが出まくってるよ。こりゃもう駄目かもわからんね。
エラーチェックが終わったので、とりあえずディスクの中身を新マシンの方に吸い出しておくことにする。
OSC2009Tokyo/Spring会場からネットワークに繋がらない、ということで小林さんや組長や池添さんに助けてもらった。
古いUbuntuでGUIを使ってネットワークの設定を行っていた場合、今のUbuntu(8.10)では、ネットワーク設定のためのGUIを起動してもまるで設定が行えない状態になるようだ。
僕の場合、会社の無線LANの設定が /etc/network/interfaces に残っていて、これがあるせいで新しいUbuntuのネットワーク自動設定機能が全く働かなくなっていた。今まで外出先でUbuntuで無線LANを使うという事がなかったので、気付いてなかった。
auto lo iface lo inet loopback
この2行だけを残して残りを全部コメントアウトした後、システムを再起動(ログアウトしてもう一度ログイン、では駄目)したら、ネットワークの自動設定機能がちゃんと機能するようになった。