前回の続き。
お亡くなりになったTeraStationの代わりに購入したLAN DISKと、合わせて買った USB HDDでバックアップが取れないことがわかったので、USB HDDをFreeBSDに繋いでなんとかLAN DISKのバックアップが取れないかと検討した結果、mount_smbfsとrsyncで普通に行けるんじゃないの?と言うことになったのでその記録。

まず、USB HDDをFreeBSDに繋いだら、dmesgでどのように認識されたか見てみる。
# dmesg
ugen0.2: <Western Digital> at usbus0
umass1: <Western Digital My Book 1230, class 0/0, rev 3.00/10.50, addr 1> on usbus0
umass1:  SCSI over Bulk-Only; quirks = 0x4001
umass1:5:1:-1: Attached to scbus5
da5 at umass-sim1 bus 1 scbus5 target 0 lun 0
da5: <WD My Book 1230 1050> Fixed Direct Access SCSI-6 device
da5: Serial Number xxxxxxxxxxxxxxxxxxxxxxxxxxxx
da5: 400.000MB/s transfers
da5: 3815415MB (976746240 4096 byte sectors: 255H 63S/T 60799C)
da5: quirks=0x2<NO_6_BYTE>
ses0 at umass-sim1 bus 1 scbus5 target 0 lun 1
ses0: <WD SES Device 1050> Fixed Enclosure Services SCSI-6 device
ses0: Serial Number xxxxxxxxxxxxxxxxxxxxxxxxxxxx
ses0: 400.000MB/s transfers
ses0: SCSI-3 ENC Device
GEOM: da5: the primary GPT table is corrupt or invalid.
GEOM: da5: using the secondary instead -- recovery strongly advised.
ここからわかることは、HDDはusb mass storageとしてda5で認識されたこと、ses0とか言う名前でセキュリティデバイスっぽいものが認識されたこと、GEOMがGPTテーブルがおかしいよと報告していることがわかる。
GPTテーブルがおかしいのは、一度GPTでフォーマットした後にMBRで再フォーマットして、さらにLAN DISKがフォーマットに失敗しているから。
この状態で、一度GPTの情報を消去して、単一パーティションとしてフォーマットする。(zfsにするかufsにするか迷ったんだけど、zfsはメモリが潤沢なシステム向け、かつディスクの玉がたくさんある環境向け、と読んだ気がするので、ufsにする)
# gpart show da5
=>        6  976746229  da5  GPT  (3.7T) [CORRUPT]
          6      32768    1  ms-reserved  (128M)
      32774        250       - free -  (1M)
      33024  976712960    2  linux-data  (3.7T)
  976745984        251       - free -  (1M)
# gpart destroy -F da5
da5 destroyed
# gpart create -s GPT da5
da5 created
# gpart show da5
=>        6  976746229  da5  GPT  (3.7T)
          6  976746229       - free -  (3.7T)
# gpart add -t freebsd-ufs da5
da5p1 added
# gpart show da5
=>        6  976746229  da5  GPT  (3.7T)
          6  976746229    1  freebsd-ufs  (3.7T)
# newfs /dev/da5p1
# tunefs -n enable /dev/da5p1
ここまででufsのファイルシステムができたので、後は好きなところにマウントする。
バックアップ用に使うので、/backup2にマウントすることにした。(/backupは既に使っていたので)
# mkdir /backup2
# grep backup2 /etc/fstab
/dev/da5p1      /backup2        ufs     rw,noauto       0       0
# mount /backup2
# df -h /backup2
Filesystem              Size    Used   Avail Capacity  Mounted on
/dev/da5p1              3.5T    8.0k    3.2T     0%    /backup2
後は、どうにかこの新しい領域にLAN DISKのデータをバックアップすれば良いのである。
過去に試したのは、主にsmbclientを使った方法で、文字コードの問題でなかなかうまくいかなかった。
最近の動向はどうなっているのか調べがてら、mount_smbfs のマニュアルをつらつらと眺めていたら、文字コードの変換も-Eオプションとか言うのでなんとか行けそうに見える。
そこで、
# mkdir /mnt/disk
# mount_smbfs -E utf-8:cp932 //landisk/disk /mnt/disk
みたいにやってみたところ、マウントはできるが日本語のファイル名が化ける。(あ、localeはja_JP.UTF-8)
なんでだろ〜、と調べてみたところ、[FreeBSD-users-jp 92712] mount_smbfs で CP932 を UTF-8 として mount できないと言うスレッドを発見。
これは、RELENG_8だからFreeBSD8の頃の議論なのだけれど、「utf-8→UTF-8のaliasが動作しないのは、・・・」と言う一節を発見。
# mount_smbfs -E UTF-8:cp932 //landisk/disk /mnt/disk
に変えてみたところ、無事に日本語のファイル名が見られるようになった。
さらに、いつも困っていたパスワード周りの話も、/etc/nsmb.conf または ~/.nsmb.conf に書けることを発見。
早速/etc/nsmb.conf に以下を記述。
[LANDISK:USER]
password=$$1xxxxxxxxxx
charsets=UTF-8:CP932
はまりポイントとしては、以下。
  • セクション[LANDISK:USER]は大文字で書く必要がある
  • password=の値は、smbutilと言うコマンドがあるので、smbutil crypt で生成することができる
  • mount_smbfs でマウントした場所のファイルのオーナーは、見かけ上マウントしたディレクトリのオーナーになる(上記の例の場合、/mnt/disk のマウント前のオーナーになる)。-u, -g オプションで上書き可能だが、smbfsの特性上サーバ側から見ると「samba maount した人」からのアクセスになるし、クライアントから見ると「samba mount した人に許可された操作」しかできないことになるので、こう言うことになるのだろう。
簡単な暗号化をかけるとは言ってもパスワードを書くファイルなので、/etc/nsmb.conf は root のみrwである。
ここまでくれば、後は普通にrsync で mount_smbfsしたディレクトリから、/backup2にバックアップしてやれば良いことになる。
家庭内だし、バックアップ目的なのでrootで全部やっても良いかなとは思ったんだけど、なんとなく一般ユーザでやるようにしてみた。(mountだけはrootでやらないといけない)
これで手動でのバックアップはできるようになったので、後は自動化するスクリプトを書けば良いんだけど、面倒だなあ・・・。

カテゴリ

トラックバック(0)

このブログ記事を参照しているブログ一覧: NASのバックアップをFreeBSDで

このブログ記事に対するトラックバックURL: https://www.wizard-limit.net/cgi-bin/mt/mt-tb.cgi/3154

コメントする

このブログ記事について

このページは、falseが2014年4月27日 21:41に書いたブログ記事です。

ひとつ前のブログ記事は「TeraStationの最期」です。

次のブログ記事は「MacBook Proも逝く」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

広告

Powered by Movable Type 6.1.1