(再)ラズパイ3 のセットアップ(2-3)

  1. 以前から稼働しているサーバーと同じユーザー名 =UID で操作を統一したい
  2. Raspbian を microSD から元々の USBハードディスクに移行する
  3. できるだけ過去の蓄積データを継続で利用したい

モニタの 3.5インチLCDディスプレイがセットアップできているので、最低限のパッケージの導入から進めようと考えています。
なんてったって最大の問題は、勝手にアップデートされてしまい、壊れてしまうことです。一般的な Linux ってインタフェースが変更になるような大きなパッケージ更新については、意識してアップグレードしない限り実行されないと思ってました。色々なディストリビューションとの長い歴史の中での経験則ですが、Raspberry pi の Raspbian に関しては経験が活きない異端児なのかもしれませんね。
デスクトップとしてセットアップして、サーバーとして使うことが想定外の使い方なのでしょうね。うぅ〜ん困ったものです。何を行えば勝手な更新が止められるのか不明です。
壊れても短時間で復旧させられるように、情報を整理してまとめておいて、機械的な流れで復旧作業できる環境を作っておく必要がありそうです。


Raspbian は、操作を全て pi ユーザーの UID : 1000 に統一して、構成されています。色々なディストリビューションが一般的に最初のユーザー登録で、UID : 1000 から登録されますので、例えば既に稼働しているサーバーは sunao ユーザーを UID : 1000 に登録して運用しています。
何が問題かというと、大量に管理しているデータを、各サーバー間で自動転送して、バックアップしながら管理している事を考えたとき、 rsync で単純にコピーすると各ファイルのオーナーは UID の番号で管理されているので、同じ UID なのにサーバーが変わるとファイルの所有者名が異なって扱われてしまう事になります。
ネット共有ディスク samba の扱いでも同様に、ファイル所有者 UID の扱いが問題として発生します。そこで、再セットアップ中のラズパイ3 で、ユーザーファイルを vipwコマンドで編集を行い pi ユーザー名の箇所を sunao ユーザー名に変更してみました。ただし、グループファイルは、pi グループが色々な箇所で定義されているようなので、不具合が出る可能性が高く、そのままの状態です。
 sunao – uid:1000 / pi – gid:1000
 pi – uid:1001 / pi – gid:1000
と変更してみました。


次に microSD から USBディスクに移行する作業は、実機のラズパイ3 上では出来ないので、Linux が稼働しているノートパソコンで作業しています。 microSD をラズパイ3 から取り出して、USBディスクと一緒にノートパソコンに装着し、一応コピー元とコピー先のファイルに関しては、fsckコマンドでエラーがない、あるいはエラーの修復を行った後に、両方のファイルをマウントして作業しています。
microSD (8GB) に作られている Raspbianシステムを、外付けの USBディスクに移しますが、移行先は、既に利用していた USBディスクなので、パーティション構成や今まで使っていたデータ自体も入ったままになっています。移行するのは新しく再セットアップした microSD のパーティション2 から 外付け USBディスクのパーティション2 へコピーが終われば完了です。
オプションに –delete を追加した rsyncコマンドでコピーします。既に作業に使用するマウントポイントは作成されていたものとしています。
ノートパソコンに装着すると自動マウントされてしまうので、適切にアンマウントして、次のように作業します。

# mount /dev/mmcblk0p2 /mnt/work   ……microSDのパーティション2
# mount /dev/sdc2 /mnt/bkup     ……USBディスクのパーティション2
# rsync -av --delete /mnt/work/ /mnt/bkup/  ……システムのコピー
# umount /mnt/work
# umount /mnt/bkup
# mount /dev/mmcblk0p1 /mnt/work   ……USBディスクから読むための修正
# cd /mnt/work
# ls        ……bootディレクトリの確認
# vi cmdline.txt  ……次で項目で説明しているのと同じ修正を行います
# cd
# umount /mnt/work

さらに修正が必要なのは、microSD からコピーされた USBハードディスク上に記述されているパーティションのマウント情報ですが、正常に立上げが行われた時には、 /etc/fstab に対応するファイルになります。
今回の場合は、USBディスクのパーティション2 の etc ディレクトリに置かれているので、自分自身のパーティションが、ルートファイルシステム( / )としてマウントできるように、指定の記述方法は、 /dev/sda2 でも  blkid でリストされた UUID= でも PARTUUID= でも、ディスクのパーティションが識別できればマウントされるので、そのように修正します。

# mount /dev/sdc2 /mnt/work
# vi /mnt/work/etc/fstab
proc                         /proc    proc    defaults   0   0
PARTUUID=bcacf1da-01         /boot    vfat    defaults   0   2
UUID=86782691-13d8-429a-a015-3e010d6e7248  / ext4    defaults   0   1
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that
# umount /mnt/work 

作業していた microSD と USB外付けディスクをノートパソコンから外して、ラズパイ3 に装着して電源を入れると、USBディスクからの立上げが行われます。


ラズパイ3 が正常に立上がると、LCD のドライバとかコマンドが入っているディレクトリ(~/LCD-show)に移動して、色々な操作が出来ますが、この中に置かれている cmdline.txt のルートファイルシステム (Raspbian OS自身) の読み込み先が、 microSD カードの /dev/mmcblk0p2 のままになっているので、現在は構成が外付けの USBディスクからの立上げに変更になったので、 /dev/sda2 に変更しておかないとこれをコピーされて再起動できなくなってしまうので注意します。

$ cd LCD-show/
$ vi cmdline.txt
dwc_otg.lpm_enable=0 console=tty1 console=ttyAMA0,115200 root=/dev/sda2 rootfstype=ext4 elevator=deadline rootwait fbcon=map:10 fbcon=font:ProFont6x11 logo.nologo
 次の作業は、USBディスクに作られている過去からの複数のデータが、立上げプロセスで自動マウントされていますので、マウントポイントを作ってからマウント情報の /etc/fstab を適切に編集して、システムの立上げでマウントできるようにします。