自宅サーバのハードディスク交換の予行演習

今まで何度か行なってきた自宅サーバ(FreeBSD)のハードディスクの交換ですが、いろいろと作業に手間取り、データの移行作業が出来ないままの状態となっています。少なくとも来週の休日まで延期となりそうです。とりあえず移行作業の目処が立ちましたので、移行作業の予行演習として、模擬的に作ったコピー元のハードディスク( Hitachi HDS723020BLA642 )から移行先のハードディスク( WDC WD20EZRX )へコピーを行なってみました。今日はここまでの作業でした。

上手く移行作業が出来なかった原因は、はっきり言って、移行先のハードディスクの WDC WD20EZRX を 4KB/セクタできっちりとパーティション切りが出来なかったためです。

現在使用中のハードディスクは従来からの 512B/セクタのものでした。またパーティションも MBR の標準通りの 63 ブロックから始まるパーティションで設定がしてあって、単純にハードディスク間で dd コマンドでイメージコピーをすれば完了する状態ではありませんでした。

現状のハードディスクのパーティション状況

もちろんこの 4KB/セクタを無視し、 AFT 機能を存分に活かして動作させる方法もあります。今回のように大量のデータをコピーするには 4KB/セクタでパーティションを区切ったハードディスクに比べて3倍程度の時間は掛かると思いますが、一応は動作するはずです。

しかしこの時間のロスや、将来再びやってくるであろうハードディスクの交換に備えて現時点で 4KB/セクタで対応したパーティション切りをしておきたいと思いました。

まず今回最も問題となったのが、FreeBSD 9.2 の標準のインストーラ(bsdinstall)でのパーティション設定でした。シェル上で手動により設定する他ありませんでした。一応、GUI での設定ツールにおいても複数のパーティショニングを行うことができて、それも割り当てられた領域のブロック数が8で割れる 4KB/セクタに対応できるような状態でした。しかし先頭のパーティションの位置が 4KB/セクタの区切りではない場所から始まっていることから全体のパーティションの区切りもずれた状態となっていました。これでは本来のハードディスクの読み書きの性能が得られません。

# gpart show
=>        63  3907029105  ada0  MBR  (1.8T)
          63          63        – free –  (31k)
         126  3906994077     1  freebsd  [active]  (1.8T)
  3906994203       34965        – free –  (17M)
赤字で表示した freebsd のパーティションの開始位置 126 が 8 で割り切れないブロック位置から開始していることが問題なのです。ちなみに1ブロック512バイトです。
=>         0  3906994077  ada0s1  BSD  (1.8T)
           0     1048576       1  freebsd-ufs  (512M)
     1048576     2097152       2  freebsd-swap  (1.0G)
     3145728     4194304       4  freebsd-ufs  (2.0G)
     7340032     1048576       5  freebsd-ufs  (512M)
     8388608  3898605468       6  freebsd-ufs  (1.8T)
  3906994076           1          – free –  (512B)

手動でパーティションを設定するときに使うコマンドで -b オプションによってパーティションの開始ブロック位置の調整ができるようになっていますが、この gpart のコマンドのバグなのか仕様なのかはよく解りませんが、63 ブロック単位でまとめられてしまう癖があり、4KB/セクタの区切りの良い場所でパーティションが設定出来ない状態となっていました。例えば bsdinstall の標準で割り当てられる最初のパーティションの開始ブロックは 126 ブロックとなっています。しかしこれを8で割り切れる 128 ブロックに指定しても、やはり 126 ブロックから開始とするなどと理由のわからぬ位置で区切ってしまうのです。さらに Linux などでよく使われる 2048 ブロックを開始位置にしようとしても 2048 ブロックから配置してくれないのです。

gpart コマンドでのパーティション設定例

MBR 形式でハードディスクを初期設定します。
# gpart create -s mbr /dev/ada0
ada0 created

FreeBSD に割り当てるパーティションの先頭を 504 ブロックとした例です。
# gpart add -a 4k -b 504 -t freebsd /dev/ada0
ada0s0 added

ネット上を検索しながら彷徨っていると、開始ブロックを 504 ブロックから開始すると調度良い区切りができるという情報を得て、ようやく 4KB/セクタに対応したパーティション区切りができました。

# gpart show
=>        63  3907029105  ada0  MBR  (1.8T)
          63         441        – free –  (220k)
         504  3907028601     1  freebsd  [active]  (1.8T)
  3907029105          63        – free –  (31k)
青字で表示した freeBSD のパーティションの開始位置が 504 ブロックと 8 で割り切れるブロックからの開始となりました。

=>         0  3907028601  ada0s1  BSD  (1.8T)
           0     1048576       1  freebsd-ufs  (512M)
     1048576     2097152       2  freebsd-swap  (1.0G)
     3145728     4194304       4  freebsd-ufs  (2.0G)
     7340032     1048576       5  freebsd-ufs  (512M)
     8388608  3898639992       6  freebsd-ufs  (1.8T)
  3907028600           1          – free –  (512B)

ここままで時間をかなり使い果たしてしまいました。データの移行作業は12時間以上の時間が掛かるため、今回の休日での作業は断念となりました。

そこで来週に備えて、以前データの移行作業で使ったシェル・スクリプトの見直しをしました。そして手持ちの空きハードディスクへ新規に FreeBSD 9.2 をインストールして、この仮設のハードディスクから移行先となる WDC WD20EZRX へデータを転送してみました。そして起動まで正しく行えることを確認してみました。
新規に FreeBSD をインストールしたてのため、システムのみの小容量のデータなのでさほどデータに転送の時間が掛かりません。何度かデータの転送を繰り返してみて、データ転送用のスクリプトを試験・調整を行なっておこうと思っています。

データ転送試験の様子です。
手前が仮設のシステムディスクです。
奥がデータの転送先となる新しいハードディスクです。

参考
前回のハードディスクの交換の様子の記事はこちらです。
http://near-unix.blogspot.jp/2011/03/blog-post.html

WestanDigital WD20EZRX 2.0TB を購入

我が家では珍しく新品でハードディスクを購入しました。自宅サーバのハードディスクがそろそろ三年になろうとしているため、故障してしまう前に新しいハードディスクへ交換をしようと考えたからです。もちろん交換してしまえば、電源を入れっぱなしとなるため、新品以外に考えられませんでした(笑)。

いつも好んで購入していたのは、日立というか HGST のものでした。しかし最近ではまだ出回っているのか不明ですが、いわゆる安価な価格帯で並ぶ商品ではないようです。結局悩むことなく、某世界最大級と言われているネットショップから一番安価なものを選びました。

それがこの WestanDigital WD20EZRX 2.0TB でした。 現在使用しているハードディスクの容量が 2.0TB のもので、まだ 70% 程度の使用率のため、増量することなく現状の容量を維持したまま交換することとなりました。

WestanDigital WD20EZRX のストレス・フリー・パッケージです。
しっかりとしたダンボールで出来た箱で、これなら普通のパッケージ品よりしっかりした梱包ではないかと思いました。

ただ気になることは、現在のハードディスクは 512バイト/セクタの製品で、新しいものは 4,096バイト/セクタのものとなっています。そのため、単純に dd コマンドでイメージ・コピーをするわけには行かないようです。もしかすると前回の交換の時に意識して 4Kバイト区切りでパーティションを切っているかもしれませんが、あまり期待しない方が良さそうです。

ハードディスクの試験専用に用意してあるパソコンに繋いでテストを行いました。
長時間の試験で発熱も心配されることから、ちゃんと冷却ファンで空冷をしました。

さて購入したハードディスクですが、WestanDigital 謹製のハードディスク・試験ソフトウェア(Data Lifeguard Diagnostic)で早速試験をしてみました。問題なく終了して、輸送中の障害も無かったようです。

ついでに HGST の試験ソフトウェア(DriveFitnessTest)でもテストを行なってみましたが、やはり問題はありませんでした。

問題は、コピー作業に12時間程度の時間が掛かると予想しています。この作業中に一切の仕事を止めて作業をする訳にもいかず、代替のサーバを用意して作業をしようと思っています。自宅 LAN 内の DHCP, DNS, Web, SMTP, IMAP, Asterisk の部分だけを一時的に移植してみようと思っています。

休日の日曜日にコピー作業を予定していますが、上手くゆくことやら・・・。

おまけの画像
2ch で「WD20EZRX 00D8PB0」の話題を検索してみるともちろんありました。重さが 600 グラム程度で二枚プラッタを使用しているらしいのですが、私の手元にあるものは 630 グラムでした。微妙に重たいのですが誤差の内でしょうか(汗)。

WestanDigital WD20EZRX 2.0TB 00D8PB0 の重さ 630 グラム

Debian Wheezy の Cups で {job_originating_user_name} と表示される件

ちょっと以前から気になっていた Debian Wheezy の Cups で印刷を指示したユーザー名や文章名などが表示されず {job_originating_user_name} という表示になっていた件をネット上で検索して対策しました。

印刷文章名が「未知」、
ユーザー名が{job_originating_user_name}となっています。

次の URL を参考にしました。
cups: joblist displays {job_originating_user_name} instead of real username
https://bugs.launchpad.net/ubuntu/+source/cups/+bug/890644

問題を対策するには、/etc/cups/cupsd.conf を修正する必要がありました。JobPrivateValues という変数を default から none へ変更します。同じ変数が二箇所に出てきますので、どちらも同様に修正します。

JobPrivateValues default
     ↓
JobPrivateValues none

この修正が終了したところで、cupsd を再起動させます。

# /etc/init.d/cups restart

以上で再度 Cups 経由で印刷を行ったとき、 {job_originating_user_name} と表示されず、本来のユーザー名が表示されれば成功です。「完了したジョブを表示」をクリックして過去の印刷結果を表示させると、{job_originating_user_name} の部分がちゃんとユーザー名に変わっているはずです。

ちゃんとユーザー名の表示をしてくれました。

FreeBSD 9.2 p9 へアップデート

FreeBSD 9.2 へ p9 アップデートが到着していました。

# svn update /usr/src
Updating ‘/usr/src’:
U    /usr/src/contrib/file/Magdir/commands
U    /usr/src/contrib/file/file.h
U    /usr/src/contrib/file/ascmagic.c
U    /usr/src/contrib/file/softmagic.c
U    /usr/src/contrib/file/funcs.c
U    /usr/src/UPDATING
U    /usr/src/sys/conf/newvers.sh
U    /usr/src/crypto/heimdal/lib/gssapi/krb5/prf.c
Updated to revision 267868.

アップデートの内容は以下のとおりです。

20140624:       p9      FreeBSD-SA-14:16.file
                        FreeBSD-EN-14:08.heimdal

Fix multiple vulnerabilities in file(1) and libmagic(3). [SA-14:16]
http://www.freebsd.org/security/advisories/FreeBSD-SA-14:16.file.asc

Fix gss_pseudo_random interoperability issue. [EN-14:08]
http://www.freebsd.org/security/advisories/FreeBSD-EN-14:08.heimdal.asc

セキュリティ対策一点とエラー対策一点の合計二点のアップデートとなっています。なお FreeBSD 10 には、この他にも更に二点の対策が含まれています。詳しくは FreeBSD 公式ウェブサイトをご覧ください。

どちらもユーザーランドの再構築を行うように指示があります。カーネルのバージョン番号も一緒に引き上げておきたいので、私はユザーランドもカーネルも再ビルドしておきました。アップデート後の動作に問題はないようです。

# cd /usr/src
# make buildworld && make buildkernel KERNCONF=MYKERNEL
# make installkernel
# make installworld
# reboot

Debian Wheezy LXDE で PDF リーダーと関連付け

Debian Wheezy LXDE をインストールしている ThinkaPad X31 へ PDF リーダーをインストールしました。

なぜか LXDE をインストールした時には PDF リーダーが事前にインストールされていませんでした。PDF リーダーもいろいろある中、Gnome でもおなじみの Evince をインストールすることとしました。他の gnome のデスクトップがインストールされているマシンと同じ条件で表示されるものの方がよいと考えたからです。

インストールは簡単でいつものように aptitude コマンドでさっくりとインストールしました。

# aptitude install evince
以下の新規パッケージがインストールされます:
  evince evince-common{a} libdjvulibre-text{a} libdjvulibre21{a}
  libevdocument3-4{a} libevview3-3{a} libgxps2{a} libkpathsea6{a}
  libnautilus-extension1a{a} libspectre1{a} libt1-5{a}
更新: 0 個、新規インストール: 11 個、削除: 0 個、保留: 0 個。
8,537 k バイトのアーカイブを取得する必要があります。展開後に 21.5 M バイトのディスク領域が新たに消費されます。
先に進みますか? [Y/n/?] 

インストール完了後、PDF ファイルを読み込んで表示させてみたり、先日整備したプリンタ環境を使って印刷も行なってみました。どちらも問題ありませんでした。

しかし気になることが…。

それは LXDE 標準のファイラーである PCManFM の関連付けでした。PCManFM で PDF ファイルをダブルクリックすると、画像編集ソフトウェアの Gimp が起動してしまうのです。PDF ファイル上で右クリックをして起動させるソフトウェアを選択してファイルを開くことも可能ですが、いまいち使い勝手がよくありません!

そこで関連付けを見直すこととしました。

と言っても関連付けの作業は簡単です。 PDF ファイルを右クリックで選択した後、「アプリケーションで開く」を選択して、改めて「ドキュメントビューア」の Evince を選択して、更にダイアログボックスの左下にある「選択したアプリケーションをこのファイルタイプのデフォルトのアクションとする」にチェックマークを入れるだけです。次回からはダブルクリックで Evince で PDF ファイルが開くようになります。

同様にして画像ファイルの PNG ファイルなども Gimp が起動するようになっているので、同様にしてイメージビューアの GPicView を関連付けすれば使いやすくなると思います。

Debian Wheezy LXDE でブラザーのプリンタを設定

我が家の主力プリンタはブラザーの MFC-695CDN です。以前も同じブラザーの MFC-810 でした。ブラザーのプリンタは Linux 用のドライバが用意されているため、Linux 主体の我が家においてはとてもありがたい機種となっています。

さて今回は Debian Wheezy LXDE をインストールした ThinkPad X31 へ、このブラザーの MFC-695CDN のプリンタ設定を行おうとしたところ、何と!インストール・エラーが発生してしまいました。今まで Gnome のデスクトップの環境では発生しなかったインストール・エラーだけに驚いてしまいました。

エラー表示を調べてみると gnome-keyring のデーモンが LXDE 上では動作していないことが原因でした。同様のことは Xfce でも発生すると思いますので、同様の症状が発生した場合には参考にしてください。

まずプリンタ用のドライバをメーカーのウェブサイトからダウンロードしてきます。

http://support.brother.co.jp/j/s/support/index.html

機種名を入力して当該機種専用のページヘ移行した後、更に OS の種類やパッケージの形式(Linux deb 形式を選ぶ)などに応じてページを進んで行きます。

二種類のドライバをダウンロードしてきます。
私がダウンロードした最新のドライバの二点です。

LPR プリンタ・ドライバ
 mfc695cdnlpr-1.1.3-1.i386.deb
CUPSwrapper プリンタ・ドライバ
 mfc695cdncupswrapper-1.1.3-1.i386.deb

まず最初に keyring デーモンのインストールから行います。
/etc/xdg/autostart/ のディレクトリ内にある次の四つの gnome-keyring ファイルを編集します。どれも同じ場所を編集します。

gnome-keyring-gpg.desktop
gnome-keyring-pkcs11.desktop
gnome-keyring-secrets.desktop
gnome-keyring-ssh.desktop

編集する部分は、OnlyShowIn=GNOME;Unity; の部分を探しだして LXDE; を追加します。
[補足]デスクトップに Xfce を使用している場合には大文字で XFCE; を追加します。

OnlyShowIn=GNOME;Unity;
     ↓
OnlyShowIn=GNOME;Unity;LXDE;

以上の四つのファイルの編集が完了したら、一度マシンを再起動させます。

これでプリンタドライバのインストールに支障なくなりました。最初に LPR プリンタ・ドライバからインストールします。

1.LPR プリンタ・ドライバからインストール

/var/spool/lpd/ のディレクトリが存在しないと思いますので、事前にディレクトリを作成しておきます。

# mkdir /var/spool/lpd/

dpkg コマンドでドライバのパッケージをインストールします。

# dpkg -i –force-all mfc695cdnlpr-1.1.3-1.i386.deb

(注意)このパッケージは /etc/printcap などの設定をすべて消して新規に上書きします。必要な設定があれば、事前に保管をして再度設定し直してください。

2.CUPSwrapper プリンタ・ドライバのインストール

dpkg コマンドでドライバのパッケージをインストールします。

# dpkg -i –force-all mfc695cdncupswrapper-1.1.3-1.i386.deb

エラー表示がなければインストール終了です。

3.CUPS の設定

CUPS システムの設定を行います。インストールしたままの状態では USB 接続で印刷できるようになっています。これを LAN 経由で印刷できるように設定し直します。なお本項ではプリンタ本体の LAN 設定については説明しておりません。

ブラウザでCUPS Web 管理サイトを http://localhost:631 で表示させます。

操作の際、ログイン名とパスワードを求められますが、これは Debian Wheezy をインストールの時に設定した [root] と [rootのパスワード] です。

[プリンター] のタブを選択すると、すでに [MFC695CDN] として登録されているはずです。この [MFC695CDN] を選択します。

[管理] の中の [プリンター変更] を選択します。後は順次問い合わせに応じて下記二箇所の部分を変更します。

デバイス:AppSocket/HP JetDirect
デバイスURL:socket://[プリンタのURL または IP アドレス]

再設定したあと、管理画面から [メインテナンス] の [テストページの印刷] を選択するとテストページが印刷キューへ送られてプリンタから印刷が開始されれば CUPS の設定は成功となります。

Debian Wheezy LXDE で Keepassx の文字化け対策

Debian Wheezy の LXDE をインストールした ThinkPad X31 を快調に使用しています!

実用的にするために各種のアプリケーション・ソフトウェアを順次インストールしていました。その中にキーワードを管理する Keepassx も含まれています。この Keepassx は、Puppy Linux において、日本語キーボードを使用していると文字化け(英語キーボードで入力した状態になる)が発生していますが、同じ症状がこの LXDE のデスクトップ上でも発生しました。

同じ Debian Wheezy の Gnome3 で発生していないのでどうしたものかと思って再び調査してみました。以前の Puppy Linux の時には見つけられなかったこの Keepassx の問題を「LXDE Keepassx」の文字列で検索してみるとたくさん出てきました。意外と多くの人が同じ症状で困っているようでした。それも us タイプの英語キーボード以外のドイツ語などの外国人も多く含まれていました。

この検索で解ったことはデスクトップのキーボードのマッピングを設定する setxkbmap のコマンドで再定義をして Keepassx を使用すると問題が発生しないということでした。確かに私が Pupp Linux で体験した keepassx の文字化けもキーボードの再定義で一時的に解決していました。

そこで Keepassx を起動させる前にシェルスクリプトで setxkbmap コマンドを実行させて対応することとしました。具体的な手順は以下のとおりです。

特権ユーザーに昇格して作業を行います。

$ su
パスワード:

Keepassx のコマンドのあるディレクトリへ移動します。

# cd /usr/bin

シェルスクリプトを keepassxjp としてファイルを作ります。

# touch keepassxjp

実行フラグをシャルスクリプト・ファイルに設定します。

# chmod 755 keepassxjp

シェルスクリプト・ファイルを編集します。

# vi keepassxjp

以下の内容を書き込みます。大文字「ZZ」で Vi エディタを終了させます。

#!/bin/sh
/usr/bin/setxkbmap -model jp106 -layout jp
/usr/bin/keepassx

メニューの中の Keepassx のプロパティを開いて呼び出すコマンドkeepassx %f から /usr/bin/keepassxjp へ変更します。なお %f の部分は不要です。

Keepassx のプロパティを開こうとしているところ
コマンド:の部分を編集します。

これでパソコンを再起動させて、Keepassx を使用して自動入力で文字化けがなければ成功です。

[追記] 以上の方法より効果的な方法がありました。

デスクトップへログインしたときにキーボードの設定を行う方法です。

新規に setxkbmap でキーボード設定を行うファイル(/etc/xdg/autostart/setxkbmap.desktop)を作ります。

特権ユーザとなって作業をします。

# touch /etc/xdg/autostart/setxkbmap.desktop

vi などのエディタでキーボードを設定する内容を記述します。

[Desktop Entry]
Version=1.0
Encoding=UTF-8
Name=JP keyboard settings
Exec=setxkbmap -model jp106 -layout jp
Terminal=false
Type=Application

以上の内容を書き込んだところで、一旦デスクトップからログアウトしてログインしなおすか、マシンを再起動させてください。

デスクトップへログインした時点ですでにキーボードの設定は pc105 から jp106 へ切り替わっています。そのため Keepassx の起動ファイルの修正に手をかける必要がありません。この方法がお奨めです。

参考URL
Wrong keys auto-typed by KeePass/KeePassX in Ubuntu
http://mycomputeradventures.blogspot.jp/2012/01/wrong-keys-auto-typed-by.html

[追記の追記] もっともっと!簡単な方法がありました。

 [メニュー]>[設定]>[セッションと起動] の設定画面を開きます。

この中から [自動開始アプリケーション] のタブを開きます。

左下の [+追加] ボタンを押して [アプリケーションの追加] のダイヤログボックスを開きます。

  • 名前を [ JP106KBSET ] と記入します。
  • 説明に [ 日本語キーボード設定 ] と記入します。
  • コマンドに [ setxkbmap -model jp106 -layout jp ] と入力して終了します。

これで一度ログアウトした後、ログインし直すと日本語キーボード JP106 の設定が反映されます。