luks

内蔵HDDが遅くて死にそうだったので暗号化している外付けHDDを内蔵HDD代わりに起動時に自動マウントしてみたけど,結局マウントオプションの問題だった話

経緯

内蔵HDDにたかだか5MBのqgsファイルを保存するだけで30分くらいかかって泣きそうだったのでHDDを乗換えてから問題追求することにした.
運良くバックアップ用につないでいたLUKSで暗号化済の外付けHDDがまぁまぁ早かったので,とりあえずそっちにデータを写してマウントポイントを変え暫定対処しようとした.

前提

内蔵HDD /dev/sdb
外付けHDD /dev/sdc
外付けHDDはパーティションを切る前にHDD丸ごとLUKSで暗号化済

方法

こちらを参考にしたっつーか,ほぼそのまま → (Linux)LUKSでファイルシステムを暗号化してみた : 3流プログラマのメモ書き

  1. mkfs
    暗号化セットアップはできていたので,ファイルを消す(フォーマット)ところから.
    試しに mkfs.ext4dev やってみたら,マウントする時に ext4dev なんてFSは知らネーヨ!って怒られたので,ext4 で.

    sudo cryptsetup luksOpen /dev/sdc csdc
    sudo mkfs.ext4 /dev/mapper/csdc
    sudo cryptsetup luksClose csdc
    
  2. luksAddKey
    キーファイルを作ってluksに登録.参考サイトに従い/bootにキーを配置
    ちなみに,無限にキーを登録できると思ってたけど上限数(0から7の8個だった)があるようだ.

    sudo dd if=/dev/urandom of=/boot/luks.key bs=1 count=1024
    sudo cryptsetup luksAddKey /dev/sdc /boot/luks.key
    sudo cryptsetup luksDump /dev/sdc
    

    マウントするデバイスをUUIDで指定したいので調べる.

    LUKS header information for /dev/sdc
    
    Version:        1
    Cipher name:    aes
    Cipher mode:    xts-plain64
    Hash spec:      sha1
    Payload offset: 4096
    MK bits:        256
    (中略)
    UUID:           b7223f8d-1a2c-4006-b289-35d62f88abf1    <--- これがUUID
    (略)
    

    テストはこんな感じで

    sudo cryptsetup luksOpen /dev/disk/by-uuid/b7223f8d-1a2c-4006-b289-35d62f88abf1 csdc --key-file /boot/luks.key
    sudo mount /dev/mapper/csdc /mnt
    
  3. crypttabの設定
    fstabと同じようにUUID指定でも書けた.

    csdc   UUID=b7223f8d-1a2c-4006-b289-35d62f88abf1    /boot/luks.key  luks,timeout=5
    
  4. マウント設定
    参考サイトの知見に従い rc.local で設定する.

    mount /dev/mapper/csdc /mnt
    

原因調査

実は上の工程の途中でfstabを覗いた時に目星はついていた.
何故つけたかは覚えてないけど,マウントオプションのsyncが内蔵HDDについていた.
なので,外してベンチマークを取ってみると当たりだった.
ベンチマークの取り方だけメモっておく.

sudo hdparm -tT /dev/sdb1

これは,外した後の値.うん,別に遅くないね.

/dev/sdb:
 Timing cached reads:   34264 MB in  2.00 seconds = 17156.06 MB/sec
 Timing buffered disk reads: 620 MB in  3.00 seconds = 206.35 MB/sec