HDDを楽に処分できるようにdm-cryptで暗号化した

昔はHDDを処分するときは何回も上書きで書き込みをしていたようですが大容量のディスクになればなるほど時間はかかるし、代替されたセクタにデータが残ってしまう可能性があったりするそうです。代替セクタの使用を前提としたSSDであればなおさら。

ということで最近はディスクは丸ごと暗号化しておいて処分するときはそのキーだけ破棄すればよいということになったそうです。なるほど理にかなってますね

ということでサーバー用に新しいHDDを買ったのでdm-cryptで暗号化して運用してみることにしました

要約

想像以上に面倒だった。ドリルで穴開けた方が早い

環境

  • Ubuntu 14.04 trusty (諸事情でバージョン上げられていない)

要件

  • 内臓のSATAでつないだデータ用HDDを暗号化する
  • 新規のHDDなのでデータのinplace置き換えはなし
  • 起動時に勝手にmountされるようにしたい
  • 鍵はシステム用HDDに平文で置いてしまってよい
  • 暗号化の目的は処分を楽にすることなので処分したHDDを拾った / 買い取った人に中身を見られなければよい

技術選定

Linuxでディスクを暗号化するにはdm-cryptというものを使うのが一般的だそうです

パーティションを丸ごと暗号化することができ、例えば/dev/sdX を暗号化して、/dev/mapper/cryptX のようにブロックデバイスインターフェイスを提供してくれます。この/dev/mapper/cryptX を普通にext4などでフォーマットして使うことができる

暗号化メタデータの扱い

主に2つ

LUKS

パーティションの先頭にソルトや暗号化方式などのメタデータを入れておく方法。 blkidコマンドなどパーティションを扱うツールでそのパーティションがLUKSで暗号化されているということがわかるため扱いを間違えづらいなどのメリットがある

メタデータの部分がぶっ壊れると復旧不可能になるというデメリットがあるが(メタデータのエクスポートも一応できる)ディスクが壊れたらバックアップから復旧するべきで、壊れたディスクからサルベージしようとしている時点で負けなのではないでしょうか

plain

ソルトを使用せずに直接暗号化鍵でencrypt / decryptする方法。メタデータが一切不要になるがパーティションみても何だったかよくわからない / 暗号化方式をデフォルトに頼る / 自分で指定する必要がある などデメリットもある。

基本的にはLUKSがおすすめらしいよ

作業

$ sudo apt-get install cryptsetup

# keyの作成
# パスワードマネージャーで生成したすごい長い文字列を使っています
# そのままパスワードマネージャーに登録しておくことでバックアップも兼ねる
$ sudo sh -c'echo "XXXXXXXXXXXXXXXXX" > /etc/hddXkeyfile
$ sudo chmod 400 /etc/hddXkeyfile

# ここでデバイスを間違えると即死なので注意
$ sudo cryptsetup -v luksFormat --key-file /etc/hddXkeyfile /dev/sdXN

# /dev/mapper/cryptX にマウントされる
$ sudo cryptsetup --key-file /etc/hddXkeyfile open /dev/sdXN cryptX

$ sudo mkfs.ext4 /dev/mapper/cryptX

# UUIDの確認
$ sudo blkid
...
/dev/sdXN: UUID="XXXXX-XXXXX-XXXXX-XXXXX" TYPE="crypto_LUKS"
...

# 起動時用設定
$ sudo vi /etc/crypttab
# 例
# cryptX UUID=04d26127-cb73-49fe-b5a5-3ad2ede5ba8b /etc/hddXkeyfile luks,timeout=60

$ sudo vi /etc/fstab
# 例
# /dev/mapper/cryptX /storageX       ext4    errors=remount-ro 0       2

$ sudo mkdir /storageX
$ sudo mount -a
$ touch /storageX/testfile

# crypttabの確認
# openコマンドで手動でmappingしたときと同一の結果になるかチェックしておく
$ sudo umount /storageX
$ sudo cryptdisks_stop s2
$ sudo cryptdisks_start s2
$ sudo mount -a
$ ls /storage2
lost+found  testfile

参考にしたページ

https://wiki.archlinuxjp.org/index.php/Dm-crypt

感想

ネット上のいい感じの資料がArchWikiくらいしかなく世の中の人はあんまり暗号化してないのではないでしょうか。 またWindowsMacと比べると自由度が高い代わりにだいぶ手順が煩雑めで自分で考える必要があることも多い

今回はやらなかったのですが鍵自体を暗号化したり、起動ディスクを暗号化したり、鍵をネット経由で取得したりといったこともがんばればできるそうです。できるそうですがやりたいかと言われると…

響 Hibiki radio station のリニューアルに対応

響がリニューアルしていたので、net-radio-archiveも対応しました。

まるまるっと全部変わっていたのでコードもまるまるっと書き直しました。

Support Hibiki renewal · yayugu/net-radio-archive@8bb01a5 · GitHub

一番大きな変更として配信プロトコルが PC:rtmp(flash) / スマホ:HLS という構成からHLS一本に統一されました。

net-radio-archiveではHLS対応のため、新しめのffmpegが必要となります。

ラジオを録音/ダウンロードできる net-radio-archive はこちら↓

github.com

2015/09 最近の録画サーバー事情 (ZFS, 安鯖, Cloud Backupなど)

自分はネットラジオなんかを録画するシステムを開発してるわけなんですが、

インターネットラジオを全録音するソフトつくった - 方向

これをどういうサーバーで運用しているかというのをメモしておこうと思います。

前提

  • ストリーミングのインターネットラジオ(radikoを2チャンネルほどやA&G+など)をリアルタイムで録音・録画している
  • その他毎週更新だったりするやつもとっている
  • ニコ生も1日15本ほど保存している(net-radio-archiveの新機能として開発中)
  • テレビ放送のTSはキャプチャしてない

サーバー(ハードウェア)

ストレージ代

自宅サーバーにしているのはクラウドストレージはなにをどうやっても料金が高いため。S3に月数万円も払うよりは自分でHDD買ってきてRAID組んだほうが経済的な気がした。

最近はBackblaze B2という破格のS3互換ストレージが発表されたのでこいつで動くようにシステムを改修してもいいかもしれないと考え始めている。

ただS3系のやつはディレクトリ構造というのを持つことができずいわゆるファイルシステムとしては使えないのでファイルのリストなんかは別にDBで持っておいて、リンクを表示するWebページを生成する必要があったり、sftpなんかで外部から繋いでファイルを設置したりできなかったりと不便なのでnfsなんかでファイルシステムとしてmountできてなおかつ安いクラウドストレージとか出てきてくれないかなーと願ってる

いわゆる安鯖について

安鯖は自分でPC自作するよりもだいぶ安い見積もりとなったし、どんな破格でも業務用サーバーなので安定しているだろうと思って買った。実際安定している。 ML110とかじゃなのはもう少し強いCPUが欲しかったからで、まあ現状そこそこ (CPU Usage Avg は 50/200% くらい)。純粋なNAS用じゃなくてアプリケーション色々動かす場合は4Coreのやつ買っても良かったかもしれない

ECCメモリしか使用できないものを買ったのは完全に失敗でNon-ECCが動いたほうが良い。自分は仕方ないのでヤフオクで安いのを6GB分買い集めた。多分全部で6000円くらいなので安いっちゃ安いがECCメモリでも色々種類とかあるし供給が少ないのは面倒。

OS, FileSystem

自宅でNASっぽいシステムを組むからにはデータをふっとばさないことは極めて重要であり、RAIDだったりSnapshotだったりの機能はあったほうが良い。 FreeNASなんかを入れれば全部揃うんですが、自分はこのサーバーをアプリケーションサーバーとしても使うし、FreeBSDを使えるほど豪の者ではないのでUbuntuにした。 LinuxFreeBSDほどZFSとの親和性が高くないので大丈夫か不安だったが今のところ問題はない。(インストールは面倒だった)

Linuxを使う上でRAIDとSnapshotを使える組み合わせは以下の通りだが

1つめはトラブった時地獄っぽいし、Btrfsは不安定かつRAID5,6についてはStableじゃない。 ZFSはdkmsでkernelのbuildが必要だったりと面倒で、かつapt-get upgradeなんかでkernelが更新されるとZFSがロードされなくなったり再インストールが必要になったりする。

全部微妙なわけなのですがZFS使ってます。動くようになってzfs_arc_maxを1GBくらいに抑えこんだ後は快適。

Backupについて

自宅ストレージやってる知り合いいっぱいいるんですが、驚くべきことにBackupをとってない人が多い。つまりストレージが複数台壊れたらそれでデータはおしまいという。実際飛ばしてる人も多いしRAIDしたって故障率が下がるだけで壊れるときは壊れるし雷とか水害とか食らったらRAIDに意味ないわけだ。

というわけでどっか別の場所にデータを保存する必要があるわけで CrashPlanというサービスを使っている。

競合サービスにBackblazeがあるがこちらは「NASで使うな」と公式に書いてあってサーバーに優しくない。

Dropbox系の容量無制限サービスなんかはTS送るおじさんとか/dev/urandom送るおじさんなどの鬼畜によってガンガン殺されていく (Bitcasaとか) 一方でそのだいぶ前からあるバックアップ系のBackblazeとCrashPlanはいまだ問題なく健在で安定感がある。

CrashPlanについて

バックアップサービス。 $5/monthで容量無制限のバックアップができる。 headless(GUIのない)なLinuxでの使用方法なども丁寧に解説されている。 まあ実際復元するときの速度が現実的かみたいな問題はあるが、必要なデータだけピンポイントで復元することもできるし、自分の用途だと多分なんとかなるだろう。

アップロード速度は結構遅いがニコ生除いて20GB/monthくらいの増加量の自分だとなんとか追いついている。それ以上だと厳しくて工夫したり諦めたりする必要があるかもしれない。

バックアップ用のdaemonJavaでわりとメモリを消費する。ファイル数にもよるがデフォルトで1GB消費するし、容量やファイル数によってはそれ以上のメモリの割当が必要になる (詳細はこの辺のドキュメント に書いてある)

ニコ生について

ニコ生は録画自体にも苦労するがその容量にも苦労する。30分程度の番組でも300MB程度の容量を消費しうっかりと一挙放送だったり野球中継だったりといった長時間番組を録画してしまうと1ファイル3GBくらいのブツになる。

ニコ生を録画し始めたらストレージに保存しておくにもキツイしCrashPlanでのバックアップも追いつかなくなってきてしまうようになった。

そんななか救世主として現れたのがGoogle Photosである。このサービスは再エンコードを許容すればなんと容量無制限で動画を保存できる!!アップロードも高速!!

ということでニコ生についてはGoogle Photosにアップロードした上で自宅サーバーからは順次消去していく運用をとることにした。

Google Photosについて

Google Photosとは画像と動画の無限ストレージ(検索機能付き)である。すばらしい。

アップロードも高速で一応QuotaはあるようだがCrashPlanとは比較にならないほどのスループットが出る。

とはいえLinux Serverで使用するにはいくつか問題がある。

  • UploadにAPIが使えるのかよくわからない。古いPicasaのやつが使えるような使えないような(試していない)
  • 自動バックアップソフトのGoogle Photos BackupはWindowsMac版しかなくLinux版が用意される気配はない

というわけでファイルの更新を検知してAPI叩くものを作った上で謎APIを叩けないか試行錯誤するのはつらそうだったので。なんとかGoogle Photos BackupをLinuxで動かないか試行錯誤してみた。

  • Wine → OAuthっぽいTokenをWindowsで取得してレジストリの内容をWineにコピーしてくると動くことは動く。ただしとても不安定で30分ほどで勝手に死んだりして、Wineの設定を試行錯誤するごとに振るまいが変わったりしてダメっぽいので諦めた。
  • Virtual Box + Windows(正規) + Synced Folder → 概ね問題なく動く

なお、閲覧時に動画にファイル名などがでないので一覧性低そうだがGoogle Driveと連携してそちらから見ればファイル名で一覧表示できることがわかった。Googleサービス間の謎っぽい連携最高!

Virtual Box + Windows

VM上のWindowsGoogle Photos Backupという一応GUIなアプリを動かすためUbuntuGUI環境を入れた。

デスクトップ環境を丸ごと入れると重そうだったので X + fluxbox + tight vnc server という構成にした。環境構築はとても面倒だったがCPUもメモリもほとんど消費しておらず優秀

Google Photos Backupはだいたい問題ないものの、アップロードが十数個のファイルを残して止まり、新しいファリウを探索しなくなるという問題があったため、Windowsのタスクのスケジュールでアプリを再起動するbatファイルを登録して、一日に一度強制再起動を書けるようにした。アップロードが止まる根本原因は不明。

rem google-photos-backup-restart.bat

taskkill \IM "Google Photos Backup.exe"
"C:\......Google Photos Backup.exe"

それから、メモリは消費しないもののやたらにCPUを消費するのでVirtual Boxの設定で1Coreの25%などに制限しておくといい。

監視・アラート

メトリクス監視はmackerel。使いやすいし無料だし最高!

ログ監視してのアラートは手が回っておらず、一応cronのstdout, stderrの内容をメールするようにしている。日本語文字化けが直らないしmailtoをどこのファイルにも書いていない気がするのにメールが飛んでくるなど謎挙動で動作している状態なのでもっといい方法に切り替えていきたいが、このあたりは知見がない。

課題・今後の方向性

  • システムが複雑かつ手順書などもないため再構築が困難になっている
  • Google Photosまわりの運用をもう少しまともにする方法を考えていきたい
  • Backblaze B2が使い物になるようであればそちらにデータを置き、ローカル + CrashPlan Backupなデータを減らしていきたい

Twitter Great RSS で複数画像の表示に対応しました。

いまさらなのですが1ツイートに複数の画像を投稿してるやつに対応しました。

Twitter Greate RSS とは何なのかについてはこちら↓

TwitterのRSSを生成する Twitter Great RSS をつくった - 方向


ところでHerokuが24時間起動できなくなって若干困ってます。6時間くらい死んでる。 ユーザーで誰かHobby Dyno ($7 / month)分くらいの金払ってくれる人いたら連絡ください

アニたまを録音できるようになりました

Net Radio Archiveがアニたま(別冊ラジ関)に対応しました。

テンション低いゆきんこや嫉妬するのじょさんを何度も楽しめますね!

これで現在対応しているメディアは

5つになりました。

github.com

最近注目の番組

logirl.favclip.com

あけこが安定してひどい。

文化放送とは比較にならない綺麗なスタジオ、高い画質、豪華なゲストなどテレ朝マネーで残念なあけこがハイクオリティーで演出されています。

なお、Net Radio Archiveは番組の配信プラットフォームであるLoGiRLには対応しておりません。誰かやってくれー

インターネットラジオを全録音するソフトつくった

Net Radio Archive (https://github.com/yayugu/net-radio-archive) というソフトを作りました

特徴

番組表をいい感じにスクレイピングして、番組名などが付いた良い感じのファイルを出力してくれます。

...
2015_05_08_1200_村川梨衣の_a_りえしょんぷり~ず♡_村川梨衣.mp4
2015_05_08_1230_小澤亜李・長縄まりあのおざなり_小澤亜李、長縄まりあ.mp4
2015_05_08_1300_A&G_ARTIST_ZONE_THE_CATCH__AiRI_AiRI.mp4
2015_05_08_1430_A&G_NEXT_BREAKS_松田利冴のFIVE_STARS.mp4
2015_05_08_1500_金田朋子・保村真のエアラジオ_金田朋子、保村真.mp4
2015_05_08_1530_水島大宙・木村良平_←SIDE_BY_SIDE→_水島大宙、木村良平.mp4
2015_05_08_1600_超!A&G+_スペシャル.mp4
2015_05_08_1700_角元明日香の本気!アニラブ_角元明日香.mp4
2015_05_08_1730_高橋美佳子のマルごとぴ〜なっつ!_高橋美佳子.mp4
2015_05_08_1800_A&G_ARTIST_ZONE_THE_CATCH__鷲崎健_鷲崎健.mp4
2015_05_08_1930_A&G_NEXT_BREAKS_吉田有里のFIVE_STARS.mp4
2015_05_08_2000_三上枝織の_A&G_NEXT_GENERATION_Lady_Go!!_三上枝織.mp4
2015_05_08_2100_黒崎真音のRADIO_RONDO_ROBE~妄想王女の単独電波~_黒崎真音.mp4
...

今までの似たソフトだと時刻を指定したりして録画・録音するものが多かったのですが、そうではなく全部とっておきたい、番組タイトルも自動で付けて欲しいと思いつくりました。

現在対応しているもの

動かし方

Linuxなどで動きます。

24時間起動するマシンが必要です。またRadikoのエリア判定がいい感じとなるIPのサーバーがいいでしょう。

自分ように作っているものなのでパッケージングが十分とは言いがたく、他環境で動かすと問題がでてくるかも知れませんのでgithub issueなりTwitter (@yayugu) なりでお気軽にご相談ください。

github.com

追記:
ライセンス付けました。MITです