投げ銭

★当サイトへの投げ銭(PayPal)★

LINK


(無償、寄付歓迎) logo
世界中で使われるISO標準オフィスソフト(MSオフィス互換)

★LibreOfficeの導入事例★
詳細について

人気の投稿(1ヶ月間)

Ad

Ad

投げ銭

★当サイトへの投げ銭(PayPal)★

2020年4月25日土曜日

【Raspberry Pi 4 B / Raspbian】BOINCの作業領域を外付けUSB HDDドライブに移してSDの劣化を防止する【BOINC 7.14.2+dfsg-3】


■概要■

下記ページに記したように通常にBOINCをインストールしただけでは、ワークディレクトリはSDカード上に設けられる。

【Raspberry pi 4 / Raspbian】分散コンピューティングRosetta@homeに参加してタンパク質の立体構造解析に貢献する【Raspbian】

しかし、24時間365日稼働させるとなると、Raspberry Pi のメインSDカードの劣化が心配である。
そこで、USB HDD(もしくはUSB SSD)に設けたパーティションをBOINCが作業領域として使用するように設定したい。
連続稼動を考えるなら、ひょっとしたらSSDの方が良いのかも知れない。


Raspberry Pi 4であれば、USB 3.0ポートを備えているので、
USB 3.0 SuperSpeedに対応したUSB HDDであれば、高速な動作を期待できる。

下記ページには、Raspberry Pi 4 に、外付けのUSB HDDを接続し、システム起動時に自動的にマウントするように設定する手順を記した。
Raspberry PiのUSBポートの電源不足を回避する方法についても記載している。

【Raspberry pi 4 B / Raspbian 】USB 3.0対応のUSB HDDを自動的にマウントするように設定する手順


以下では、上記ページの方法で、Raspberry Pi 4にUSB HDDが利用できるようになっているものとして、(ただし、まだマウントまでする必要はない。)
BOINCのワークディレクトリを、USB HDD上のディレクトリに変更する手順を記した。
以下手順では、USB HDDは、全てデータが消去されてしまうので不要なものを使うこと。

以下の作業では、rootユーザーで行っている。
$ sudo su



■BOINCのワーキングディレクトリを移すためのUSB接続のHDD(もしくはSSD)の準備

(注意)
以下手順では、USB HDDは、全てデータが消去されてしまうので不要なものを使うこと。

以下に登場する、"sdX"という表記は、操作ミスを防ぐために"sda"を置き換えたものである。
お使いの環境に応じて、変更するようにしてください。


〇適切な大きさの第一パーティションの作成を行った。

ここで使用したディスクは、USB 3.0接続の2.5インチHDDで、500GBの容量がある。
BOINCのワーキングディレクトリの移設用として、約32GB分のパーティションを作成した。
この確保容量は、Rosetta@homeプロジェクトのコンピューティングのみを想定している。
後で示すように、4.5 GB程度しか使用されない。

しかし、複数のプロジェクトに同一マシンで参加させる場合、
プロジェクトの扱うデータにも関係して、容量はずっと大きくなるのではないかと思う。(これは試してない。)

USB HDDは、/dev/sdXとして認識されたとする。(接続直後、dmesgコマンドで確認可能)
これを引数にとって、partedコマンドを実行した。

root@raspberrypi:/home/pi# parted /dev/sdX
GNU Parted 3.2
Using /dev/sdX
Welcome to GNU Parted! Type 'help' to view a list of commands.

・表示をバイト単位に切り替えた。
(parted) unit B


・現在のパーティションテーブルを表示させた。
(parted) p
Model: JMicron Generic (scsi)
Disk /dev/sdX: 500107862016B
Sector size (logical/physical): 512B/4096B
Partition Table: msdos
Disk Flags:
Number  Start     End            Size           Type     File system  Flags
 1      1048576B  500107837439B  500106788864B  primary  ext4
上記のように、全ての領域がパーティションに確保されている。


・このパーティションを削除した。
(parted) rm 1

(parted) p
Model: JMicron Generic (scsi)
Disk /dev/sdX: 500107862016B
Sector size (logical/physical): 512B/4096B
Partition Table: msdos
Disk Flags:
Number  Start  End  Size  Type  File system  Flags
上記のように、全てのパーティションは無くなった。
また、このHDDディスクが4Kバイトセクタであることに注意した。


・第一パーティションをBOINCワーキングディレクトリ用として作成した。
(parted) mkpart
Partition type?  primary/extended? primary ←基本パーティションとして作成する。
File system type?  [ext2]? ext4 ←ext4ファイルシステムを利用する。
Start? 1048576  (重要)4096の256倍になるように指定した。アライメントを考慮した。
End? 32GB  ←パーティションの容量はBOINC作業領域専用のため32GBとした。
(parted) p
Model: JMicron Generic (scsi)
Disk /dev/sdX: 500107862016B
Sector size (logical/physical): 512B/4096B
Partition Table: msdos
Disk Flags:
Number  Start     End           Size          Type     File system  Flags 1      1048576B  32000442367B  31999393792B  primary  ext4         lba

以上のようにパーティションが作成された。


・念の為、このパーティションについてアライメントできているか確認を行った。
(parted) align-check
alignment type(min/opt)  [optimal]/minimal?
Partition number? 1
1 aligned

・コマンドを終了した。
(parted) q                                                             
Information: You may need to update /etc/fstab.

〇作成したパーティションが認識されているか確認した。

root@raspberrypi:/home/pi# cat /proc/partitions
major minor  #blocks  name
   1        0       4096 ram0
   1        1       4096 ram1
   1        2       4096 ram2
   1        3       4096 ram3
   1        4       4096 ram4
   1        5       4096 ram5
   1        6       4096 ram6
   1        7       4096 ram7
   1        8       4096 ram8
   1        9       4096 ram9
   1       10       4096 ram10
   1       11       4096 ram11
   1       12       4096 ram12
   1       13       4096 ram13
   1       14       4096 ram14
   1       15       4096 ram15
 179        0   15212544 mmcblk0
 179        1     262144 mmcblk0p1
 179        2   14946304 mmcblk0p2
   8        0  488386584 sdX
   8        1   31249408 sdX1


〇ext4ファイルシステムの作成(フォーマット)

root@raspberrypi:/home/pi# mkfs -t ext4 /dev/sdX1
mke2fs 1.44.5 (15-Dec-2018)
Creating filesystem with 7812352 4k blocks and 1954064 inodes
Filesystem UUID: 8*******-4***-4***-8***-a***********
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000
Allocating group tables: done                         
Writing inode tables: done                         
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done



■上記の手順で作成したUSB HDDのパーティションに現在動作しているBOINCの作業ディレクトリの「内容」をコピーする。

一時的にマウントしたUSB HDDのパーティションに、BOINCの作業ディレクトリの内容をコピーする。


〇USB HDDのパーティションは適当なディレクトリに一時的にマウントした。

マウントポイントとなるディレクトリの作成を行い、一時的にマウントを行った。

root@raspberrypi:/home/pi# mkdir /mnt/disk1
root@raspberrypi:/home/pi# mount -t ext4 /dev/sdX1 /mnt/disk1

マウントされたかどうか確認した。

root@raspberrypi:/home/pi# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        15G  1.3G   13G  10% /
devtmpfs        1.8G     0  1.8G   0% /dev
tmpfs           1.9G     0  1.9G   0% /dev/shm
tmpfs           1.9G  8.5M  1.9G   1% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/mmcblk0p1  253M   53M  200M  21% /boot
tmpfs           381M     0  381M   0% /run/user/1000
/dev/sdX1        30G   45M   28G   1% /mnt/disk1


〇boinc-clientを停止させた。

・boinc-clientの停止
root@raspberrypi:/home/pi# systemctl stop boinc-client

・サービスの状態を表示
root@raspberrypi:/home/pi# systemctl status boinc-client
● boinc-client.service - Berkeley Open Infrastructure Network Computing Client
   Loaded: loaded (/lib/systemd/system/boinc-client.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since Fri 2020-04-24 14:06:52 BST; 4s ago
     Docs: man:boinc(1)
  Process: 1208 ExecStart=/usr/bin/boinc (code=exited, status=0/SUCCESS)
  Process: 1287 ExecStop=/usr/bin/boinccmd --quit (code=exited, status=0/SUCCESS)
  Process: 1289 ExecStopPost=/bin/rm -f lockfile (code=exited, status=0/SUCCESS)
 Main PID: 1208 (code=exited, status=0/SUCCESS)


〇データをUSB HDDをマウントしているディレクトリにコピーした。

コピー対象は、boinc-client作業ディレクトリ自体でなく、その中にあるファイルとディレクトリのみである。
ポイントは、これら作業ディレクトリの中身だけをUSB HDDのパーティションのマウントポイントのルートディレクトリにコピーすることである。

下記コマンドはそれを実行する。
オプションの「a」はアーカイブの意味で、所有者、グループ、権限をオリジナルのままにする。
オプションの「R」はリカーシブの意味で、ディレクトリがあればそのサブディレクトリに至って再帰的に辿りコピーする。
即ち、全て複製を作成するということになる。

root@raspberrypi:/home/pi# cp /var/lib/boinc-client/* /mnt/disk1/ -aR



■USB HDDのパーティションをboinc-clientのデフォルトディレクトリにシステム起動時に自動マウントする設定を行う。

上記手順で、USB HDDのパーティションには、boinc-client作業ディレクトリの内容が全てコピーされている。

これを、元々の作業ディレクトリ(/var/lib/boinc-client)にシステム起動時に自動マウントする。
これにより、boinc-clientサービスは、USB HDDの領域を作業場として利用することになる。


〇USB HDDのパーティション(データコピー済み)のPARTUUIDを調べた。

PARTUUIDの情報は自動マウント設定のために必要である。

root@raspberrypi:/home/pi# blkid
/dev/mmcblk0p1: LABEL_FATBOOT="boot" LABEL="boot" UUID="4***-D***" TYPE="vfat" PARTUUID="7*******-01"
/dev/mmcblk0p2: LABEL="rootfs" UUID="4*******-7***-4***-a***-0***********" TYPE="ext4" PARTUUID="7*******-02"
/dev/sdX1: UUID="8*******-4***-4***-8***-a***********" TYPE="ext4" PARTUUID="0*******-01"
/dev/mmcblk0: PTUUID="7*******" PTTYPE="dos"


〇USB HDDのパーティションをboinc-clientデフォルトディレクトリに自動マウントする設定を行った。

下記のように、USB HDDのBOINC用パーティションを自動マウントするための設定を加えて保存した。

root@raspberrypi:/home/pi# nano /etc/fstab
proc            /proc           proc    defaults          0       0
PARTUUID=738a4d67-01  /boot           vfat    defaults          0       2
PARTUUID=738a4d67-02  /               ext4    defaults,noatime  0       1
PARTUUID=0*******-01  /var/lib/boinc-client      ext4    defaults,auto,rw,nofail   0       2
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that
/var/lib/boinc-clientは、既存のディレクトリでありオリジナルのboinc作業ディレクトリである。
ここに、USB HDDのパーティションを自動マウントすることによって、オリジナルのデータは隠されて、
USB HDDパーティションにコピー済みのデータにアクセスされることになる。

(注意)
マウントオプションに、「user」を入れてしまうとnoexecでマウントされてしまうので絶対にダメである。
これによって、ワークがRUNされずDONEERRとなった。(boinctuiでの表示の場合)
この問題解決に非常に時間がかかった。
タスクのダウンロードはなされるものの、いざタスクを実行する段階になれば、
即座にタスクが終了して、DONEERRとなってしまうのだった。

その場合、次のような権限エラーがログに記載されていた。

# grep failed /var/lib/boinc-client/client_state.xml
<stderr_out>
  <![CDATA[
   <message>
     process exited with code 13 (0xd, -243)
   </message>
   <stderr_txt>
     Process creation (../../projects/boinc.bakerlab.org_rosetta/rosetta_4.15_aarch64-unknown-linux-gnu) failed: Error -1, errno=13
execv: Permission denied
   </stderr_txt>
  ]]>
</stderr_out>
# grep project /var/log/syslog | less

Apr 24 14:00:53 raspberrypi boinc[1208]: dir_open: Could not open directory 'projects/boinc.bakerlab.org_rosetta' from '/var/lib/boinc-client'.

しかし、/etc/fstabに記載するマウントオプションから、userオプションを外すことによって、問題が解決した。
そして、順を追って述べるように、正常にタスクがRUNの状態になった。


〇システムの再起動

・まず、boinc-clientが自動起動しないように設定しておく。

この段階では、まだboinc-clientはシステム起動時に正常に起動しない。
そのため、disableをしておく。(全て準備が整ってからenable指定に戻す。)

root@raspberrypi:/home/pi# systemctl disable boinc-client

・そして、システムの再起動
root@raspberrypi:/home/pi# reboot

システムの再起動後には、
/var/lib/boinc-clientディレクトリに、HDD USBの第一パーティションがマウントされる。


〇自動的にマウントされることを確認した。

root@raspberrypi:/home/pi# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        15G  1.3G   13G  10% /
devtmpfs        1.8G     0  1.8G   0% /dev
tmpfs           1.9G     0  1.9G   0% /dev/shm
tmpfs           1.9G   17M  1.9G   1% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/sdX1        30G   54M   28G   1% /var/lib/boinc-client
/dev/mmcblk0p1  253M   53M  200M  21% /boot
tmpfs           381M     0  381M   0% /run/user/1000

/etc/fstabの設定例のように、「defaults,auto,rw,nofail」のみ設定した結果、
再起動後には次のオプション(noexecなし)でマウントされていることが確認できた。

# mount
/dev/sdX1 on /var/lib/boinc-client type ext4 (rw,relatime)



■boinc-clientサービス起動のための微調整

〇USB HDDパーティションのマウント先ディレクトリの所有者:グループの変更を行った。

上記手順で、自動マウントできるようになっても、マウントポイントである「/var/lib/boinc-client」の所有者とグループは「boinc以外」になっていた。

そこで、所有者:グループを、boinc:boincに変更した。


・所有者:グループの変更を行った。(boinc:boincにする。)

root@raspberrypi:/home/pi# chown boinc:boinc /var/lib/boinc-client
(さらに、chmodで、775にしてもよいかもしれない。ここではせずとも動作した。)

root@raspberrypi:/home/pi# ls /var/lib/boinc-client -al
total 236
drwxr-xr-x  5 boinc boinc  4096 Apr 24 14:10 .  ←カレントディレクトリ
drwxr-xr-x 28 root  root   4096 Apr 24 13:52 ..
-rw-r--r--  1 boinc boinc  1382 Apr 24 14:01 account_boinc.bakerlab.org_rosetta.xml
-rw-r--r--  1 boinc boinc 53556 Apr 24 13:52 all_projects_list.xml
lrwxrwxrwx  1 root  root     34 Apr 24 13:52 ca-bundle.crt -> /etc/ssl/certs/ca-certificates.crt
lrwxrwxrwx  1 root  root     31 Apr 24 13:52 cc_config.xml -> /etc/boinc-client/cc_config.xml
-rw-r--r--  1 boinc boinc 32225 Apr 24 14:01 client_state_prev.xml
-rw-r--r--  1 boinc boinc 35831 Apr 24 14:06 client_state.xml
-rw-r--r--  1 boinc boinc   325 Apr 24 13:59 coproc_info.xml
-rw-r--r--  1 boinc boinc   118 Apr 24 14:06 daily_xfer_history.xml
lrwxrwxrwx  1 root  root     43 Apr 24 13:52 global_prefs_override.xml -> /etc/boinc-client/global_prefs_override.xml
lrwxrwxrwx  1 root  root     34 Apr 24 13:52 gui_rpc_auth.cfg -> /etc/boinc-client/gui_rpc_auth.cfg
-rw-r--r--  1 boinc boinc   138 Apr 24 14:00 lookup_account.xml
drwx------  2 root  root  16384 Apr 24 13:47 lost+found
-rw-r--r--  1 boinc boinc 23708 Apr 24 14:01 master_boinc.bakerlab.org_rosetta.xml
drwxrwx--x  2 boinc boinc  4096 Apr 24 14:01 notices
drwxrwx--x  3 boinc boinc  4096 Apr 24 14:00 projects
lrwxrwxrwx  1 root  root     34 Apr 24 13:52 remote_hosts.cfg -> /etc/boinc-client/remote_hosts.cfg
-rw-r--r--  1 boinc boinc 22184 Apr 24 14:01 sched_reply_boinc.bakerlab.org_rosetta.xml
-rw-r--r--  1 boinc boinc  6472 Apr 24 14:01 sched_request_boinc.bakerlab.org_rosetta.xml
-rw-r--r--  1 boinc boinc   425 Apr 24 14:01 statistics_boinc.bakerlab.org_rosetta.xml
-rw-r--r--  1 boinc boinc     0 Apr 24 13:52 stderrgpudetect.txt
-rw-r--r--  1 boinc boinc     0 Apr 24 13:52 stdoutgpudetect.txt
-rw-r--r--  1 boinc boinc   343 Apr 24 14:06 time_stats_log

これらのファイルは全て、USB HDDの第一パーティション内に存在している。


〇boinc-clientサービスがマウント完了以降のタイミングで起動するように設定を編集した。

これも大切な設定である。

boinc-clientのワーキングディレクトリは、SDカード上ではなく、USB HDDのパーティション上に存在することになる。
だから、boinc-clientサービスの始動前に、マウントが完了していなければならないのだ。
この設定をしなければ、エラーが発生して、boinc-clientを自動起動できなかった。

次のように、サービスファイルを編集し、mnt-wibble.mount の後でboinc-clientサービスは起動するようにする。

編集箇所は、下記のようにアンダーラインを引いた一行のみである。

root@raspberrypi:/home/pi# nano /lib/systemd/system/boinc-client.service
[Unit]
Description=Berkeley Open Infrastructure Network Computing Client
Documentation=man:boinc(1)
After=network-online.target mnt-wibble.mount

[Service]
ProtectHome=true
Type=simple
Nice=10
User=boinc
WorkingDirectory=/var/lib/boinc
ExecStart=/usr/bin/boinc
ExecStop=/usr/bin/boinccmd --quit
ExecReload=/usr/bin/boinccmd --read_cc_config
ExecStopPost=/bin/rm -f lockfile
IOSchedulingClass=idle

[Install]
WantedBy=multi-user.target


■以上の手順を全て完了後に、boinc-clientサービスの起動を行う。


〇サービスの自動起動の再設定、そして起動を行った。

・boinc-clientサービスを自動起動するように再設定した。
root@raspberrypi:/home/pi# systemctl enable boinc-client

・boinc-clientサービスの起動を行った。
root@raspberrypi:/home/pi# systemctl start boinc-client

・boinc-clientサービスの起動状態を確認した。
root@raspberrypi:/home/pi# systemctl status boinc-client
boinc-client.service - Berkeley Open Infrastructure Network Computing Client
   Loaded: loaded (/lib/systemd/system/boinc-client.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2020-04-24 14:26:56 BST; 28s ago
     Docs: man:boinc(1)
 Main PID: 349 (boinc)
    Tasks: 2 (limit: 4260)
   Memory: 18.1M
   CGroup: /system.slice/boinc-client.service
           └─349 /usr/bin/boinc


〇boinctuiもしくは、boincマネージャーで動作確認を行った。

root@raspberrypi:/home/pi# boinctui

/var/lib/boinc-client にマウントしたUSB HDDのパーティション1の容量(32GB)がストレージとして認識されている。


また、Rosetta@homeプロジェクトの場合、タスクが600MB程度ダウンロードされた後に、
無事にそれらのタスクが実行され始めた。


外付けのハードディスクがアクセスランプを明滅させカリカリと音を立てた。


〇数日ほど動かしてから、ディスクの使用状態を確認した。

Rosetta@homeプロジェクトの分散コンピューティングだけでは、下記のように、4.5 GB程度しか使用されていない。

root@raspberrypi:/home/pi# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        15G  1.3G   13G  10% /
devtmpfs        1.8G     0  1.8G   0% /dev
tmpfs           1.9G     0  1.9G   0% /dev/shm
tmpfs           1.9G  8.5M  1.9G   1% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/sda1        30G  4.5G   24G  17% /var/lib/boinc-client
/dev/mmcblk0p1  253M   53M  200M  21% /boot
tmpfs           381M     0  381M   0% /run/user/1000

以上



<参考>

・Set systemd service to execute after fstab mount
< https://unix.stackexchange.com/questions/246935/set-systemd-service-to-execute-after-fstab-mount > 2020年4月24日


投げ銭

★当サイトへの投げ銭(PayPal)★

Ad

Ad