投げ銭

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

LINK


(無償)
logo
世界中で使われるISO標準オフィスソフト(MSオフィス互換)
The Document Foundation Wiki

人気の投稿(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日


2020年4月24日金曜日

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



■概要

USB HDD(USB 3.0対応)を、Raspberry Pi 4 B のUSB3.0ポートに取り付けて、
指定したディレクトリにマウントして運用する手順について記した。
Raspberry pi 4 Bは、Raspbian Buster Lite 2020-02-13 がインストールした。
マウントはRaspbianの起動時に自動的にされるように設定した。


〇Raspberry Pi 4 B は、USB 3.0ポートを2つ備えている。

USB 3.0 SuperSpeedモード(SSモード)に対応したUSB HDDドライブを取り付けることによって、高速にディスクへのアクセスが可能になる。


〇外部電源を接続できるUSBハブ(USB 3.0対応)を利用する。

Raspberry Pi 4 BのUSB 3.0ポートが供給可能な電力は少ない可能性がある。

外部電源を供給せずに、直にRaspberry Pi 4 BのUSB 3.0ポートにUSB HDDを接続しても、
USB HDDは異音を発して正常に作動しなかった
異なるメーカーのUSB HDD(いずれも2.5インチHDDが入るタイプ)も用いてみたが、同様に正常に動作しなかった。
駆動に必要な電力が不足していると考えられる。これは、Raspberry Pi 3においても同様だった。

そのため、USB HDDは、外部電源の接続が可能なUSB HUBを経由させてRaspberry Pi 4に接続した。すると正常にUSB HDDは駆動した。
もちろん、このUSB HUBも、USB3.0に対応している。


〇接続の全体の様子(下の写真)

右側にRaspberry Pi 4 B
中央の正方形のものがUSB 3.0 ハブと、USB HDDである。
左側で、ACコンセントにつないでいるのはUSBアダプタであり、中央のUSB3.0 ハブの外部電源である。



〇実際に使用したUSB 3.0 ハブ(下の写真)

4つのUSB 3.0ポートが上表面あり、そのうち一つにUSB HDDをつないでいる。

側面に2つ並んで接続されているものの内、
左側の端子がRaspberry Pi 4 のUSB 3.0ポートと接続されている。
右側の端子は、外部電源供給用であり、マイクロUSBケーブルが使用できるので専用DCアダプタが不要でとても便利である。
ここでは、1A出力程度のスマホのUSBアダプタに接続している。




感想(2件)


下記手順の前に、予め、rootユーザーになっておく。
pi@raspberrypi:~ $ sudo su


■先ず、USB3.0 HUB をRaspberry pi 4のUSB3.0 ポート接続

ここで接続したUSB HUBは、USB 3.0に対応している。
そのため、SuperSpeed Gen1 USB Device(USB 3.0 Hub)として認識されていることがわかる。
また、USB3.0デバイスだけでなく、USB 2.0デバイスとしても認識されていることもわかった。

詳細を知りたい場合は、下記ページを参考にしてください。

【Raspberry pi 4 B / Raspbian】USBポートに各種USB機器を接続したときのlsusbツリーやカーネルメッセージ表示【Raspbian Buster Lite 2020-02-13】



■次に、USB 3.0 接続のHDDドライブをHUBに取り付けた。

〇USB HDDのパーティション作成とフォーマット

HDDは、Raspberry Pi専用で使うので、パーティション1をEXT4でフォーマットしておいた。
パーティションの作成とファイルシステム作成については、次のページを参考にしてください。(HDD上のデータは消去されるので注意)


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

上記ページの、
「■BOINCのワーキングディレクトリを移すためのUSB接続のHDD(もしくはSSD)の準備」の項目に手順を記載しています。
(こちらはアライメントについて記載があり、対処しています。)
「〇ext4ファイルシステムの作成(フォーマット)」まで完了したら、OKです。


あるいは、以下のページも参考にしてください。
(こちらはアライメントについて記述していません。)

【Linux CentOS6.2 64bit版】partedコマンドを使いGPT対応大容量ディスクにパーティションを追加する

上記については、今回使用したHDDは500GB程度なのでGPTの条件は無視した。
すなわち旧来からのパーティションテーブルを使用した。


〇USB HDDドライブを上記のHUBに取り付け、カーネルメッセージを確認した。

接続したUSB HDDは、SuperSpeedモードで認識された。
その上、USB HDDが対応しているため、SCSIディスクとして認識されている。(uasと表示)

そして、そのパーティション1(sda1)が認識された。

root@raspberrypi:/home/pi# dmesg
[  269.554717] usb 2-2.1: new SuperSpeed Gen 1 USB device number 3 using xhci_hcd
[  269.586133] usb 2-2.1: New USB device found, idVendor=152d, idProduct=0578, bcdDevice= 1.00
[  269.586148] usb 2-2.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  269.586161] usb 2-2.1: Product: USB to ATA/ATAPI Bridge
[  269.586173] usb 2-2.1: Manufacturer: JMicron
[  269.586185] usb 2-2.1: SerialNumber: 0123456789ABCDEF
[  269.638320] scsi host0: uas
[  269.639919] scsi 0:0:0:0: Direct-Access     JMicron  Generic          8101 PQ: 0 ANSI: 6
[  269.714236] sd 0:0:0:0: Attached scsi generic sg0 type 0
[  271.939973] sd 0:0:0:0: [sda] 976773168 512-byte logical blocks: (500 GB/466 GiB)
[  271.939989] sd 0:0:0:0: [sda] 4096-byte physical blocks
[  271.944628] sd 0:0:0:0: [sda] Write Protect is off
[  271.944645] sd 0:0:0:0: [sda] Mode Sense: 53 00 00 08
[  271.945087] sd 0:0:0:0: [sda] Disabling FUA
[  271.945103] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[  271.945843] sd 0:0:0:0: [sda] Optimal transfer size 33553920 bytes not a multiple of physical block size (4096 bytes)
[  271.965122]  sda: sda1
[  271.968024] sd 0:0:0:0: [sda] Attached SCSI disk



■システム起動時に自動的にマウントするための設定を行った。


〇マウント先のディレクトリを作成した。

/mntディレクトリは最初から存在していた。
サブディレクトリとして、disk1というディレクトリを設けた。

root@raspberrypi:/home/pi# mkdir /mnt/disk1


作成したディレクトリを表示させた。

root@raspberrypi:/home/pi# ls /mnt/disk1 -al
total 8
drwxr-xr-x 2 root root 4096 Apr 22 11:14 .
drwxr-xr-x 3 root root 4096 Apr 22 11:14 ..
上記のように、他ユーザーからのアクセスは許可されている。
これにより、他ユーザーもディレクトリを開くことが許可される。


〇マウントしたUSB HDDのディスク内のパーティションのPARTUUIDを調べた。

マウント設定には、パーティションのPARTUUIDが必要になるので調べておく。

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


〇fstab設定ファイルの編集を行った。

次のように、fstabファイルを編集した。

下記のように、PARTUUID項目には、上記で見つけた番号を記載しておく。
マウント先のディレクトリは、さきに作成した「/mnt/disk1」を指定した。
マウントしたいディスクのパーティション1は、ext4でフォーマットされているのでそのように指定した。
オプションは、nofailを忘れないようにすること。さもなければ、起動しなくなる危険がある。

root@raspberrypi:/home/pi# nano /etc/fstab
proc            /proc           proc    defaults          0       0
PARTUUID=7**a****-01  /boot           vfat    defaults          0       2
PARTUUID=7**a****-02  /               ext4    defaults,noatime  0       1
PARTUUID=0*0****e-01  /mnt/disk1      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

CTRL+O Write Out
File Name to Write: /etc/fstab
CTRL+X Exit


〇システムを再起動した。
root@raspberrypi:/home/pi# reboot



■確認

〇指定したディレクトリにマウントされたか確認した。

/mnt/disk1にマウントされたディスク(USB HDD)の容量は、459GBあることがわかる。

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           2.0G     0  2.0G   0% /dev/shm
tmpfs           2.0G  8.5M  1.9G   1% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/mmcblk0p1  253M   53M  200M  21% /boot
/dev/sda1       459G   73M  435G   1% /mnt/disk1
tmpfs           391M     0  391M   0% /run/user/1000

〇アクセス権限を確認した。

もし、下記のように、マウント先ディレクトリのアクセス権限が700(rwx------)になっていれば、chmodコマンドで、755(rwxr-xr-x)に変更する
さもなければ、他ユーザーからマウント先ディレクトリに作られたサブディレクトリにアクセスすることができなくなってしまう。

下記例において、/mnt/disk1にさらにサブディレクトリを設け、サブディレクトリにはpi以外の別ユーザーのアクセス許可を与えたとしても、
トップディレクトリである/mnt、/mnt/diskに、他ユーザーに5(r-x)以上の権限がなければ、サブディレクトリへアクセスができなくなってしまうからである。

root@raspberrypi:/home/pi# ls /mnt/disk1 -al
total 24
drwx------ 3 pi   pi    4096 Apr 22 05:08 .  ←マウント先であるカレントディレクトリ(/mnt/disk1自身)
drwxr-xr-x 3 root root  4096 Apr 22 11:14 ..
drwx------ 2 root root 16384 Apr 22 05:08 lost+found

root@raspberrypi:/home/pi# chmod 755 /mnt/disk1

root@raspberrypi:/home/pi# ls /mnt/disk1 -al
total 24
drwxr-xr-x 3 pi   pi    4096 Apr 22 05:08 .
drwxr-xr-x 3 root root  4096 Apr 22 11:14 ..
drwx------ 2 root root 16384 Apr 22 05:08 lost+found


以上



<参考>

・External storage configuration
< https://www.raspberrypi.org/documentation/configuration/external-storage.md > 2020年4月19日

・【Linux CentOS6.2 64bit版】partedコマンドを使いGPT対応大容量ディスクにパーティションを追加する
< https://akira-arets.blogspot.com/2012/02/centos62-parted-create-partition.html > 2020年4月19日

・ディスクのアクセス速度を上げるには
< https://www.atmarkit.co.jp/flinux/rensai/linuxtips/659noatime.html > 2020年4月19日

・Raspberry Piでfstab弄ったら起動できなくなった場合の備忘録
< https://qiita.com/YuzuRyo61/items/fa5d23a3420d8c24c77d > 2020年4月19日

・What is UUID, PARTUUID and PTUUID?
< https://unix.stackexchange.com/questions/375548/what-is-uuid-partuuid-and-ptuuid > 2020年4月24日



2020年4月23日木曜日

【Raspberry pi 4 B / Raspbian】USBポートに各種USB機器を接続したときのlsusbツリーやカーネルメッセージ表示【Raspbian Buster Lite 2020-02-13】


Raspbian Buster Lite(2020-02-13)をインストールしたRaspberry pi 4 Model B (4GB)の、USBポート(3.0/2.0)に、
USB HUB(USB 3.0 / 2.0)や、USB HDD(USB 3.0 / 2.0)や、USBキーボード、USBマウスを接続した時の、
lsusbツリー表示、カーネルメッセージ表示をまとめた。

これをみると、接続モード(SuperSpeed 5000M, HighSpeed 480M)もわかった。



1、USBポートのいずれにも何も接続していない状態

下記結果を見ると、Raspberry pi 4のUSB 2.0ポートに内蔵HUBが内部接続されているように見える。
一方、USB 3.0ポートにそれはない。

root@raspberrypi:/home/pi# lsusb -t
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M  ←本体ルートハブ
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/1p, 480M  ←本体ルートハブ
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M  ←内部接続されているように見える本体内蔵HUB



2、つづけて、USB HUB(USB 3.0 SuperSpeed 対応)を接続した状態

USB HUB(USB 3.0 SuperSpeed 対応)をRaspberry pi 4のUSB3.0ポート(そのうち下側)に取り付けた。
その結果、下記のように、Bus 02のPort 2に5000Mbps接続で認識された。(1)
また、Bus 01のPort 1に480Mbitでも認識された。(2)

root@raspberrypi:/home/pi# lsusb -t
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
    |__ Port 2: Dev 2, If 0, Class=Hub, Driver=hub/4p, 5000M  ←(1)同じHUB(5000Mbps接続)
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/1p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 2: Dev 3, If 0, Class=Hub, Driver=hub/4p, 480M  ←(2)同じHUB(480Mbps接続)

このときのカーネルメッセージを表示させた。

root@raspberrypi:/home/pi# dmesg
<USB HUB接続後>
[  124.676892] usb 2-2: new SuperSpeed Gen 1 USB device number 2 using xhci_hcd
[  124.709455] usb 2-2: New USB device found, idVendor=2109, idProduct=0817, bcdDevice= 2.14
[  124.709471] usb 2-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[  124.709485] usb 2-2: Product: USB3.0 Hub         
[  124.709498] usb 2-2: Manufacturer: VIA Labs, Inc.     
[  124.713108] hub 2-2:1.0: USB hub found
[  124.713351] hub 2-2:1.0: 4 ports detected
[  124.806360] usb 1-1.2: new high-speed USB device number 3 using xhci_hcd[  124.938359] usb 1-1.2: New USB device found, idVendor=2109, idProduct=2817, bcdDevice= 2.14
[  124.938376] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[  124.938389] usb 1-1.2: Product: USB2.0 Hub         
[  124.938401] usb 1-1.2: Manufacturer: VIA Labs, Inc.     
[  124.940944] hub 1-1.2:1.0: USB hub found
[  124.941222] hub 1-1.2:1.0: 4 ports detected



3、つづけて、USB HDD(USB 3.0 SuperSpeed対応)を上記のUSB HUBに接続した状態

USB HUBに接続したUSB 3.0接続HDDは、下記のように、Bus 02のPort 2に5000Mbpsで認識されているハブのPort1に5000Mbpsで認識された。

root@raspberrypi:/home/pi# lsusb -t
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
    |__ Port 2: Dev 2, If 0, Class=Hub, Driver=hub/4p, 5000M
        |__ Port 1: Dev 3, If 0, Class=Mass Storage, Driver=uas, 5000M  ←USB HUBに接続したUSB 3.0接続HDD
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/1p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 2: Dev 3, If 0, Class=Hub, Driver=hub/4p, 480M

このときのカーネルメッセージを表示させた。

root@raspberrypi:/home/pi# dmesg
<USB HDD接続後>
[  269.554717] usb 2-2.1: new SuperSpeed Gen 1 USB device number 3 using xhci_hcd
[  269.586133] usb 2-2.1: New USB device found, idVendor=152d, idProduct=0578, bcdDevice= 1.00
[  269.586148] usb 2-2.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  269.586161] usb 2-2.1: Product: USB to ATA/ATAPI Bridge
[  269.586173] usb 2-2.1: Manufacturer: JMicron
[  269.586185] usb 2-2.1: SerialNumber: 0123456789ABCDEF
[  269.638320] scsi host0: uas
[  269.639919] scsi 0:0:0:0: Direct-Access     JMicron  Generic          8101 PQ: 0 ANSI: 6
[  269.714236] sd 0:0:0:0: Attached scsi generic sg0 type 0
[  271.939973] sd 0:0:0:0: [sda] 976773168 512-byte logical blocks: (500 GB/466 GiB)
[  271.939989] sd 0:0:0:0: [sda] 4096-byte physical blocks
[  271.944628] sd 0:0:0:0: [sda] Write Protect is off
[  271.944645] sd 0:0:0:0: [sda] Mode Sense: 53 00 00 08
[  271.945087] sd 0:0:0:0: [sda] Disabling FUA
[  271.945103] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[  271.945843] sd 0:0:0:0: [sda] Optimal transfer size 33553920 bytes not a multiple of physical block size (4096 bytes)
[  271.965122]  sda: sda1
[  271.968024] sd 0:0:0:0: [sda] Attached SCSI disk



4、つづけて、USBキーボードも接続した状態

USBキーボードを一台、Rapberry pi 4のUSB 2.0ポート(そのうちの上側)に接続した。

下記のように、Bus 01のPort1 に内部接続されているように見える内蔵HUBのPort 3に、USBキーボードはIf 0とIf 1とで認識された。

root@raspberrypi:/home/pi# lsusb -t
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
    |__ Port 2: Dev 2, If 0, Class=Hub, Driver=hub/4p, 5000M
        |__ Port 1: Dev 3, If 0, Class=Mass Storage, Driver=uas, 5000M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/1p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 2: Dev 3, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 3: Dev 4, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M  ←同じキーボード
        |__ Port 3: Dev 4, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M  ←同じキーボード

このときのカーネルメッセージを表示させた。

root@raspberrypi:/home/pi# dmesg
<キーボードを接続後>
[ 1700.824363] usb 1-1.3: new low-speed USB device number 4 using xhci_hcd
[ 1700.995386] usb 1-1.3: New USB device found, idVendor=046e, idProduct=52cd, bcdDevice= 1.23
[ 1700.995402] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 1700.995415] usb 1-1.3: Product: USB Multimedia Keyboard
[ 1700.995428] usb 1-1.3: Manufacturer: BTC
[ 1701.024063] input: BTC USB Multimedia Keyboard as /devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.3/1-1.3:1.0/0003:046E:52CD.0001/input/input0
[ 1701.085057] hid-generic 0003:046E:52CD.0001: input,hidraw0: USB HID v1.10 Keyboard [BTC USB Multimedia Keyboard] on usb-0000:01:00.0-1.3/input0
[ 1701.136031] input: BTC USB Multimedia Keyboard System Control as /devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.3/1-1.3:1.1/0003:046E:52CD.0002/input/input1
[ 1701.204577] input: BTC USB Multimedia Keyboard Consumer Control as /devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.3/1-1.3:1.1/0003:046E:52CD.0002/input/input2
[ 1701.204998] hid-generic 0003:046E:52CD.0002: input,hiddev96,hidraw1: USB HID v1.10 Device [BTC USB Multimedia Keyboard] on usb-0000:01:00.0-1.3/input1



5、つづけて、マウスも接続した。

マウスを、2で取り付けたUSB HUBのポートに取り付けた。
2で取り付けたUSB HUBは、Raspberry pi 4のUSB 3.0ポートに取り付けられている。

Bus 01のPort1に内部接続されているように見える内蔵HUBのPort 2では、今回接続したUSB HUBが480Mbpsで認識されている。
マウスはこのPort 4に認識されている。

root@raspberrypi:/home/pi# lsusb -t
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
    |__ Port 2: Dev 2, If 0, Class=Hub, Driver=hub/4p, 5000M
        |__ Port 1: Dev 3, If 0, Class=Mass Storage, Driver=uas, 5000M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/1p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 2: Dev 3, If 0, Class=Hub, Driver=hub/4p, 480M
            |__ Port 4: Dev 5, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M  ←マウス
        |__ Port 3: Dev 4, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
        |__ Port 3: Dev 4, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M

root@raspberrypi:/home/pi# dmesg
<マウスを接続後>
[ 2339.839325] usb 1-1.2.4: new low-speed USB device number 5 using xhci_hcd
[ 2340.025843] usb 1-1.2.4: New USB device found, idVendor=1bcf, idProduct=0005, bcdDevice= 0.14
[ 2340.025858] usb 1-1.2.4: New USB device strings: Mfr=0, Product=2, SerialNumber=0
[ 2340.025871] usb 1-1.2.4: Product: USB Optical Mouse
[ 2340.042197] input: USB Optical Mouse as /devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.2/1-1.2.4/1-1.2.4:1.0/0003:1BCF:0005.0003/input/input4
[ 2340.042734] hid-generic 0003:1BCF:0005.0003: input,hidraw2: USB HID v1.10 Mouse [USB Optical Mouse] on usb-0000:01:00.0-1.2.4/input0


以上

2020年4月21日火曜日

【Linux CentOS 7】jpeg画像ファイルの容量を小さくしたり位置情報等を含むメタ情報(Exif)を除去したりできるコマンドライン


スマホで撮影した画像ファイルが数メガバイトのjpegである場合、
メール添付ではサーバーに送信を許可されないことがある。
その場合、jpegファイルを品質を落す代わりに容量を小さくすればよい。

必要なパッケージのインストールから、
指定した容量へのjpegファイルの最適化を記している。


■パッケージのインストール

epelリポジトリの導入を済ませる。
# yum install epel-release.noarch

パッケージのインストール
# yum install jpegoptim
インストール:
  jpegoptim.x86_64 0:1.4.6-1.el7                                             
完了しました!
パッケージの説明を表示させた。
# yum info jpegoptim
名前                : jpegoptim
アーキテクチャー    : x86_64
バージョン          : 1.4.6
リリース            : 1.el7
容量                : 58 k
リポジトリー        : installed
提供元リポジトリー  : epel
要約                : Utility to optimize JPEG files
URL                 : http://www.kokkonen.net/tjko/projects.html
ライセンス          : GPLv2+
説明                : Jpegoptim is an utility to optimize JPEG files. Provides
                    : lossless optimization (based on optimizing the Huffman
                    : tables) and "lossy" optimization based on setting maximum
                    : quality factor.


■jpegファイルの最適化

下記、最適化のついでに、画像ファイルのメタ情報(Exif)を削除したい場合は、
--strip-exif オプションも付けると良い。

メタ情報(Exif)の表示は、後述している。


〇品質ベースで最適化する。

品質を70%まで落とす代わりに画像ファイル容量を削減する。
ロスレスではないため、最適化により画質が劣化する。

元は3.7MB程度あった写真の画像ファイルは、-m70の指定によって、1.6MB程度に小さくなった。
もちろん、画像の内容に依存すると考えられる。

$ jpegoptim -m70 IMG_20200421.jpg


メタ情報(Exif)も削除したい場合:

$ jpegoptim -m70 --strip-exif IMG_20200422_133830.jpg
IMG_20200422_133830.jpg 4608x3456 24bit N Exif  [OK] 3710264 --> 1595107 bytes (57.01%), optimized.


〇とにかく指定したファイルを300kバイト程度に最適化する。

元は4MB程度あったファイルが、キロバイト単位で指定した容量にまで減った。
ロスレスではないため、最適化により画質が劣化する。

ファイルは上書きされるので注意すること。

$ jpegoptim -S300 IMG_20200421.jpg
IMG_20200421.jpg 4608x3456 24bit N Exif  [OK] 4029446 --> 303464 bytes (92.47%), optimized.


〇ヘルプを表示
$ jpegoptim --help
jpegoptim v1.4.6  Copyright (C) 1996-2018, Timo Kokkonen
Usage: jpegoptim [options] <filenames>
  -d<path>, --dest=<path>
                    specify alternative destination directory for
                    optimized files (default is to overwrite originals)
  -f, --force       force optimization
  -h, --help        display this help and exit
  -m<quality>, --max=<quality>
                    set maximum image quality factor (disables lossless
                    optimization mode, which is by default on)
                    Valid quality values: 0 - 100
  -n, --noaction    don't really optimize files, just print results
  -S<size>, --size=<size>
                    Try to optimize file to given size (disables lossless
                    optimization mode). Target size is specified either in
                    kilo bytes (1 - n) or as percentage (1% - 99%)
  -T<threshold>, --threshold=<threshold>
                    keep old file if the gain is below a threshold (%)
  -b, --csv         print progress info in CSV format
  -o, --overwrite   overwrite target file even if it exists (meaningful
                    only when used with -d, --dest option)
  -p, --preserve    preserve file timestamps
  -P, --preserve-perms
                    preserve original file permissions by overwriting it
  -q, --quiet       quiet mode
  -t, --totals      print totals after processing all files
  -v, --verbose     enable verbose mode (positively chatty)
  -V, --version     print program version
  -s, --strip-all   strip all markers from output file
  --strip-none      do not strip any markers
  --strip-com       strip Comment markers from output file
  --strip-exif      strip Exif markers from output file
  --strip-iptc      strip IPTC/Photoshop (APP13) markers from output file
  --strip-icc       strip ICC profile markers from output file
  --strip-xmp       strip XMP markers markers from output file
  --all-normal      force all output files to be non-progressive
  --all-progressive force all output files to be progressive
  --stdout          send output to standard output (instead of a file)
  --stdin           read input from standard input (instead of a file)


■画像ファイルのメタ情報について

画像ファイルのメタ情報(Exif)には、写真の撮影された位置情報などを含んでいる場合がある。
それを表示させるには、次のパッケージを導入する。

〇インストール

# yum install ImageMagick


〇たとえば、GPS情報の表示

# identify -verbose test.jpg | grep GPS
    exif:GPSInfo: ***
    exif:GPSLatitude: **/1, **/1, ****/100
    exif:GPSLatitudeRef: N
    exif:GPSLongitude: ***/1, **/1, ****/100
    exif:GPSLongitudeRef: E
    exif:GPSMapDatum: WGS-84
    exif:GPSVersionID: 2, 2, 0, 0

以上



<参考>
・無料のjpeg圧縮ツール「Jpegoptim」が結構すごい
< https://takakisan.com/jpeg-slim-tool-jpegoptim/ > 2020年4月23日

・LinuxでJPEG,PNGの画像サイズを削減する
< https://morizyun.github.io/infrastructure/tool-optimize-jpeg-png.html > 2020年4月21日

・コンソール上でImageMagickを使って画像ファイルのEXIF情報を取得する
< https://orebibou.com/2017/08/コンソール上でimagemagickを使って画像ファイルのexif情報/ > 2020年4月23日


2020年4月17日金曜日

【Linux CentOS 7】分散コンピューティングFolding@homeに演算能力を提供する【Folding@home】

FOLDING@HOMEは、分散コンピューティングのプロジェクトの一つである。

このプロジェクトは以前からあり、世界中のPCの処理能力を活用して、
生体タンパク質の立体構造の予測などを行ってきた。
がん、種々の難病など未解明の病気の治療に大いに役立っている。

この度の新型コロナウイルスによるCOVID-19の治療方法の開発には、このウイルスの表面のタンパク質の解析が欠かせない。
今、Folding@homeでも、新型コロナウイルスのタンパク質の解析を行っているところである。
感染症の広がりは急速であり、時間の限られる中、解析には膨大な演算が必要となる。

https://foldingathome.org/covid19/

今、世界中の人々は持っているPCをこの分散コンピューティングプロジェクトに参加させ、演算能力を提供している。
そしてついに100万台のPCがプロジェクトに参加し、1.5エクサフロップスを越えたという。
これは、スーパーコンピューター上位数百台分を優に超える演算能力であるらしい。

早い治療方法の開発を目指して、さらに演算能力を提供したいと思う。

この分散コンピューティングに自分のPCを参加させる方法はとても簡単である。
提供されているソフトウェアをインストールするだけである。
Linux、Windows、MacなどのOSに対応している。
いずれのOSであってもインストールからプロジェクトへの参加は非常に簡単である。

ここでは、Linux(CentOS 7)を搭載したPCにソフトウェアをインストールする方法、
プロジェクトへの参加方法や、さらに設定方法について説明している。

ところで、Raspberry pi など、ARM系のものを持っている方は、
BOINCという分散コンピューティングプラットフォームを利用できる。
https://akira-arets.blogspot.com/2020/04/raspberrypi4-boinc-rosettahome.html
BOINCでは、Rosetta@homeというプロジェクトが同様の解析を行っている。



■インストール(fahclient)

〇パッケージのダウンロード

[root@2b00ba0a011c software]# wget https://download.foldingathome.org/releases/public/release/fahclient/centos-6.7-64bit/v7.5/fahclient-7.5.1-1.x86_64.rpm

[root@2b00ba0a011c software]# ls -all
total 2956
drwxr-xr-x 2 root root      42 Apr 16 03:49 .
dr-xr-x--- 1 root root      43 Apr 16 03:49 ..
-rw-r--r-- 1 root root 3025708 May 31  2018 fahclient-7.5.1-1.x86_64.rpm

〇インストール

[root@2b00ba0a011c software]# rpm -i --nodeps fahclient-7.5.1-1.x86_64.rpm
Starting fahclient ... OK
インストールコマンドを実行すると、自動的にプログラムが起動した。


ところで、終了と開始はそれぞれ次のコマンドで可能である。

CPUの演算能力の提供を停止したい場合
[root@2b00ba0a011c ~]# /etc/init.d/FAHClient stop

再開したい場合
[root@2b00ba0a011c ~]# /etc/init.d/FAHClient start


まずは、次のように動作確認をしてほしい。


■動作の確認

〇動作確認

上記のようにインストールすることによって自動でプログラムが起動した。

[root@2b00ba0a011c ~]# top


写真のように、FAHClient というプロセスを2つ確認することができた。
これらはワークユニットを処理するプロセスではない。
(これらは後で確認するように、互いに開いているTCPポートが異なる。)

インストール直後ではまだ、CPUはアイドル状態であることが確認できた。

しかし、しばらく待ってみると、次のtopコマンドの結果のようにCPU使用率が約50%になった。
(ところで、CPUの稼働を100%にする方法は後述している。)

このとき、FahCore_a7 というコマンドの動作を確認できた。
これにより、Folding@homeが与えたワークユニットに取り組んでいるようだとわかった。

[root@2b00ba0a011c ~]# top
top - 04:07:47 up  1:27,  1 user,  load average: 0.83, 0.74, 0.45
Tasks:  14 total,   2 running,  12 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy, 48.7 ni, 51.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  2046876 total,   665888 free,   345524 used,  1035464 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  1521832 avail Mem
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
  225 fahclie+  39  19  287188 114964   5692 R 100.0  5.6   8:28.21 FahCore_a7

〇プロセスの優先度の確認

上記topコマンドで表示される「ni」というのは、実行優先度が変更されたユーザープロセスについて表している。

まず fahclient というユーザーが存在していることを確認した。

[root@2b00ba0a011c ~]# cat /etc/passwd | grep fahclient
fahclient:x:999:997:Folding@home Client:/var/lib/fahclient:/sbin/nologin

fahclient というユーザーのプロセスの情報を一覧した。

[root@2b00ba0a011c ~]# ps -u fahclient -al
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
5 S   999   188     1  0  80   0 - 33345 hrtime ?        00:00:01 FAHClient
4 S   999   190   188  0  80   0 - 162960 hrtime ?       00:00:04 FAHClient
4 S   999   221   190  0  99  19 - 31467 hrtime ?        00:00:00 FAHCoreWrapper
4 R   999   225   221 99  99  19 - 71797 -      ?        00:12:31 FahCore_a7
0 R     0   253    95  0  80   0 - 13789 -      pts/0    00:00:00 ps
優先度19というのは優先度が最も低いということである。
(優先度は、-20〜19までの値をとる。-20は最優先を意味する。)


〇ログの確認を行った。

ログを確認することによって処理が進んでいることがわかった。

[root@2b00ba0a011c ~]# tail /var/lib/fahclient/log.txt       
<略>
03:59:20:WU00:FS00:0xa7:Steps: first=8250000 total=250000
03:59:22:WU00:FS00:0xa7:Completed 1 out of 250000 steps (0%)
04:23:09:WU00:FS00:0xa7:Completed 2500 out of 250000 steps (1%)
04:47:04:WU00:FS00:0xa7:Completed 5000 out of 250000 steps (2%)
WU00というのはワークユニット00を表す。ワークユニットの処理が完了すれば、次のワークユニットに処理が移り、番号が増えていく。


以上のように、CentOS 7に、rpmパッケージをダウンロードして、rpmコマンドでインストールすだけで、folding@homeが動作するということがわかった。



■WEBコントロールの利用

インストールしたFahClientパッケージだけで、ブラウザを用いたWEBコントロールを開くことができる。

オリジナル設定ファイルをバックアップしておく。
[root@2b00ba0a011c ~]# cp /etc/fahclient/config.xml /etc/fahclient/config.xml.org


〇WEBポート番号の確認

[root@2b00ba0a011c ~]# netstat -ltup4
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name 
tcp        0      0 0.0.0.0:7396            0.0.0.0:*               LISTEN      190/FAHClient     
tcp        0      0 0.0.0.0:36330           0.0.0.0:*               LISTEN      190/FAHClient     
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN      46/sshd             
TCP 7396、TCP 36330 が開いていることがわかる。

そこで、wgetコマンドを用いてHTTPサーバーのポートかどうかを確認した。

[root@2b00ba0a011c ~]# wget 127.0.0.1:7396
--2020-04-16 05:40:54--  http://127.0.0.1:7396/
Connecting to 127.0.0.1:7396... connected.
HTTP request sent, awaiting response... 200 HTTP_OK

Length: 18631 (18K) [text/html]
Saving to: 'index.html'
100%[==============================================================================================================================>] 18,631      --.-K/s   in 0s   
2020-04-16 05:40:55 (183 MB/s) - 'index.html' saved [18631/18631]
このように、index.htmlが取得できたので、
TCP 7396 がHTTPポートだと考えられる。

しかし、外部にあるブラウザから接続しようとしてもアクセス許可がされていないため不可だった。
デフォルト設定ではローカルホストからしかWEBコントロールページにアクセスできない。


〇アクセス許可を設定する。

そこで、次のようにしてアクセスを許可するように促す。

(方法 1)telnetコマンドを用いる方法

・設定ファイルの書き換えを行う。

[root@2b00ba0a011c ~]# telnet localhost 36330
Welcome to the Folding@home Client command server.
Welcome to the Folding@home Client command server.
> option allow 127.0.0.1,192.168.0.0/16,172.16.0.0/12
> option web-allow 127.0.0.1,192.168.0.0/16,172.16.0.0/12
> save
> exit
> Connection closed by foreign host.

(saveコマンドを発行しなくても、しばらく待てば設定ファイルに反映された。)
すると、次のように設定ファイルが書き変わった。

設定ファイルに反映されたかどうかを確認すること。
[root@2b00ba0a011c ~]# cat /etc/fahclient/config.xml
<config>
  <!-- Folding Slot Configuration -->
  <gpu v='false'/>

  <!-- HTTP Server -->
  <allow v='127.0.0.1,192.168.0.0/16,172.16.0.0/12'/>

  <!-- Slot Control -->
  <power v='full'/>

  <!-- User Information -->
  <user v='anonymous'/>

  <!-- Web Server -->
  <web-allow v='127.0.0.1,192.168.0.0/16,172.16.0.0/12'/>

  <!-- Folding Slots -->
  <slot id='0' type='CPU'/>

・再びブラウザからのアクセスを試す

ここで、再び外部からアクセスしようとしたが、403: HTTP_FORBIDDEN となって失敗した。

ログを参照すると、外部のマシン(172.30.1.10)からのアクセスが拒否されていることがわかった。
[root@2b00ba0a011c ~]# less /var/lib/fahclient/log.txt
06:57:48:WARNING:Denied 8:172.30.1.10 access to URI:
設定ファイルに設定が書き込まれたとしても、設定ファイルがロードされなければ設定は有効にはならないのだろう。


・shutdownそして再始動(設定ファイルのロード)

そこで、再びtelnetでアクセスし、次のようにしてshutdownコマンドを送出した。

[root@2b00ba0a011c ~]# telnet localhost 36330
Welcome to the Folding@home Client command server.
Welcome to the Folding@home Client command server.
> shutdown

> Connection closed by foreign host.


shutdownの様子がログファイルに書き込まれていた。

[root@2b00ba0a011c ~]# less /var/lib/fahclient/log.txt
08:21:06:WU00:FS00:0xa7:Completed 27500 out of 250000 steps (11%)
08:23:35:FS00:Shutting core down
08:23:35:WU00:FS00:0xa7:Caught signal SIGINT(2) on PID 528
08:23:35:WU00:FS00:0xa7:Exiting, please wait. . .
08:23:44:WU00:FS00:0xa7:Folding@home Core Shutdown: INTERRUPTED
08:23:44:Clean exit
ログファイルによると、処理が中断されたようである。

しかし、すぐに何もしなくても再びワークユニット(WU00)の処理が開始された。
また、このときログファイルは新しいものに切り替わった。

再開されたことが新しいログファイルから確認できた。
また、設定ファイルが読み込まれたことも確認できた。

中断したワークユニット(WU00)は、下記に示すように、(12%)から再開された。

[root@2b00ba0a011c ~]# less /var/lib/fahclient/log.txt
08:23:47:WU00:FS00:0xa7:Completed 27772 out of 250000 steps (11%) 08:45:18:WU00:FS00:0xa7:Completed 30000 out of 250000 steps (12%)


・外部マシンのブラウザでWEBコントロールページへのアクセスを行った。

アドレス欄に、http://192.168.1.11:7396 と入力してアクセスすればよい。

次のように、WEBコントロールページが表示された。
このとき、ブラウザはFireFoxを用いた。



(以下、先程記述したtelnetでの方法で行っていれば不要)

(方法 2)FAHClientコマンドを用いる方法

ヘルプを確認すると、--send-command というオプションが使えるとわかる。

[root@2b00ba0a011c ~]# FAHClient --help
  --send-command <string>
      Send a command to an already running client.
・同様に、WEBコントロールページへのアクセス許可の設定を行う。

[root@2b00ba0a011c ~]# FAHClient --send-command 'option allow 127.0.0.0/24,192.168.0.0/16,172.16.0.0/12'
06:12:41:INFO(1):Read GPUs.txt
06:12:41:Connecting to 127.0.0.1:36330
[root@2b00ba0a011c ~]# FAHClient --send-command 'option web-allow 127.0.0.0/24,192.168.0.0/16,172.16.0.0/12'
06:14:08:INFO(1):Read GPUs.txt
06:14:08:Connecting to 127.0.0.1:36330
(saveコマンドを発行しなくても、しばらく待てば設定ファイルに反映された。)
[root@2b00ba0a011c ~]# FAHClient --send-command 'save'
06:14:33:INFO(1):Read GPUs.txt
06:14:33:Connecting to 127.0.0.1:36330
設定ファイルに反映されたかどうかを確認しておく。
[root@2b00ba0a011c ~]# cat /etc/fahclient/config.xml


・shutdownそして再始動(設定ファイルのロード)

[root@2b00ba0a011c ~]# FAHClient --send-command 'shutdown'
06:25:22:INFO(1):Read GPUs.txt
06:25:22:Connecting to 127.0.0.1:36330


(方法 3)手動で設定ファイルを書き換える方法

予め、サービスをstopさせておく必要がある。
その上で、設定ファイルを編集し、それから、startを行う。

[root@2b00ba0a011c ~]# /etc/init.d/FAHClient stop
[root@2b00ba0a011c ~]# vi /etc/fahclient/config.xml
[root@2b00ba0a011c ~]# /etc/init.d/FAHClient start



■CPU使用率の調整

〇搭載されたCPU(全コア)の使用率を100%にして処理する。

ただし、複数CPUコアを持つPCでも一つのワークユニットのみを処理する。
(後で述べる方法では、異なるワークユニットをコアごとに割り当てられる。)

次のように、パワーを変更できるコマンドがある。

[root@2b00ba0a011c ~]# FAHClient --help | grep "power"
    battery power.
  power <string=medium>
    Set the client's power level. Valid values are 'light', 'medium' or 'full'.

[root@2b00ba0a011c ~]# telnet localhost 36330
Welcome to the Folding@home Client command server.
> option power full
> save
> exit
> Connection closed by foreign host.

shutdownコマンドなどによる設定ファイルの再読み込みの強制は不要だった。

下記は、2コアCPUを持ったPCでの結果である。(topコマンド起動後、1を押下で表示)
設定をfullに変更した後は、両方のコアの使用率が100%近くになった。

(変更前)
%Cpu0  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu1  :  0.0 us,  0.0 sy,100.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

(変更後)
%Cpu0  :  0.0 us,  0.4 sy, 99.6 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu1  :  0.0 us,  0.8 sy, 99.2 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st



〇(複数CPUコアPCの場合)複数のCPUコアに異なるワークユニット割り当て処理させる。

デフォルトでは一つのコアのみがワークユニットを処理していた。
次のように、設定ファイルを編集することで、もう一つのコアも参加させることができた。(2コアのCPUの設定例)

[root@2b00ba0a011c ~]# vi /etc/fahclient/config.xml
<config>
  <!-- Folding Slot Configuration -->
  <gpu v='false'/>

  <!-- HTTP Server -->
  <allow v='127.0.0.1,192.168.0.0/16,172.16.0.0/12'/>

  <!-- Slot Control -->
  <power v='full'/>

  <!-- User Information -->
  <user v='anonymous'/>

  <!-- Web Server -->
  <web-allow v='127.0.0.1,192.168.0.0/16,172.16.0.0/12'/>

  <!-- Folding Slots -->
  <slot id='0' type='CPU'/>
  <slot id='1' type='CPU'/>
</config>

編集の上、既に述べた方法で設定ファイルをロードさせると、
下図のようにWEBコントロールページで、2つのCPUがワークユニットの処理を行っていることが確認できた。


また、ログにおいても、それぞれのCPUが別別にワークユニットを処理していることがわかった。

[root@2b00ba0a011c ~]# tail /var/lib/fahclient/log.txt
06:28:42:WU02:FS01:0xa7:Completed 187702 out of 500000 steps (37%)
06:28:43:WU00:FS00:0xa7:Completed 164642 out of 250000 steps (65%)
06:32:11:WU00:FS00:0xa7:Completed 165000 out of 250000 steps (66%)
06:33:02:WU02:FS01:0xa7:Completed 190000 out of 500000 steps (38%)
06:42:23:WU02:FS01:0xa7:Completed 195000 out of 500000 steps (39%)

topコマンドでは、「99.8 ni」という表示となり、ほぼ100%の使用率となった。
(2つのCPUコアを搭載したマシンのため。)



■終了方法

終了した方法によって、再開方法も異なるので注意すること。

(方法1)
現在実行中のワークユニットが完了してから終了する方法

telnetで接続して、finishコマンドを送る。
[root@2b00ba0a011c ~]# telnet localhost 36330
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Welcome to the Folding@home Client command server.
>
finishコマンドを送信する。

Welcome to the Folding@home Client command server.
>finish
>exit
> Connection closed by foreign host.


ログの確認を行った。

[root@2b00ba0a011c ~]# tail /var/lib/fahclient/log.txt
07:39:39:WU01:FS00:0xa7:Completed 95000 out of 250000 steps (38%)
07:44:28:WU00:FS01:0xa7:Completed 175000 out of 250000 steps (70%)
07:50:46:FS00:Finishing
07:50:46:FS01:Finishing

07:51:59:WU01:FS00:0xa7:Completed 97500 out of 250000 steps (39%)
07:52:50:WU00:FS01:0xa7:Completed 177500 out of 250000 steps (71%)
動作中のワークユニットの全てに対して、finishingと記載されているのがわかった。
それぞれのワークユニットの進捗が100%になるまでは停止しないので注意すること。
(今すぐ、止めてCPUを解放する方法は後述している。ただし、非推奨である。)

数時間後、ワークユニットが完了したとき、次のようなログが記載され、停止状態となった。以後、CPUの使用率も0%の状態のままとなった
省略
19:41:45:WU01:FS00:0xa7:Completed 242500 out of 250000 steps (97%)
19:54:01:WU01:FS00:0xa7:Completed 245000 out of 250000 steps (98%)
20:06:20:WU01:FS00:0xa7:Completed 247500 out of 250000 steps (99%)
20:18:15:WU01:FS00:0xa7:Completed 250000 out of 250000 steps (100%)
20:18:17:WU01:FS00:0xa7:Saving result file ../logfile_01.txt
20:18:17:WU01:FS00:0xa7:Saving result file dhdl.xvg
20:18:17:WU01:FS00:0xa7:Saving result file frame6.trr
20:18:17:WU01:FS00:0xa7:Saving result file md.log
20:18:17:WU01:FS00:0xa7:Saving result file pullf.xvg
20:18:17:WU01:FS00:0xa7:Saving result file pullx.xvg
20:18:17:WU01:FS00:0xa7:Saving result file science.log
20:18:17:WU01:FS00:0xa7:Saving result file traj_comp.xtc
20:18:17:WU01:FS00:0xa7:Folding@home Core Shutdown: FINISHED_UNIT
20:18:18:WU01:FS00:FahCore returned: FINISHED_UNIT (100 = 0x64)
20:18:18:WU01:FS00:Sending unit results: id:01 state:SEND error:NO_ERROR project:***** run:*** clone:0 gen:6 core:0x** unit:0x********************************
20:18:18:WU01:FS00:Uploading 6.41MiB to *.*.*.*
20:18:18:WU01:FS00:Connecting to *.*.*.*:****
20:18:24:WU01:FS00:Upload 30.22%
20:18:30:WU01:FS00:Upload 58.49%
20:18:36:WU01:FS00:Upload 87.74%
20:18:40:WU01:FS00:Upload complete
20:18:40:WU01:FS00:Server responded WORK_ACK (400)
20:18:40:WU01:FS00:Final credit estimate, ****.** points
20:18:41:WU01:FS00:Cleaning up
(再開するには)
この後、再開したい場合は、telnetで同様に接続してから、
shutdownコマンドを送出すれば良かった。

おそらく、finishで停止中の状態にある状態に対してshutdownしているのではないかと思う。
したがって、shutdownすることによって、次の状態へ進めて、処理が再開されると考えることができると思う。



(方法2)
強制的に終了する方法(非推奨である。前述のfinishコマンドを使うこと。)

[root@2b00ba0a011c ~]# /etc/init.d/FAHClient stop

(再開するには)
この場合は、再開したい場合は、次のようにする。
[root@2b00ba0a011c ~]# /etc/init.d/FAHClient start


以上



<参考>

・How To Folding@home: FAHClient config & control manual page
< https://forums.anandtech.com/threads/folding-home-fahclient-config-control-manual-page.2574018/ > 2020年4月16日

・Sending Commands to Running FAHClient [Arch Linux]
< https://foldingforum.org/viewtopic.php?f=88&t=25885 > 2020年4月16日

・oguya/fah-config.xml
< https://gist.github.com/oguya/5924b94c1be6ae9e070d > 2020年4月16日

・3rd party FAHClient API
< https://github.com/FoldingAtHome/fah-control/wiki/3rd-party-FAHClient-API > 2020年4月16日

・Folding@Home: Linux FAHClient Command Line Installation/Usage
< http://jhurani.com/linux/2018/05/11/folding_at_home.html > 2020年4月16日

・Fedora 31にamdgpu-proを(一応)入れてRADEONでFolding@homeを動かす
< https://qiita.com/204504bySE/items/03ca5015ec95190b5e2d > 2020年4月16日

・Folding@Home COMMAND LINE ONLY OPTIONS
< https://foldingathome.org/support/faq/installation-guides/linux/command-line-options/ > 2020年4月16日

・Stop Folding, Complete current WU
< https://foldingforum.org/viewtopic.php?f=61&t=24854 > 2020年4月16日



・Folding@home LINUX
< https://foldingathome.org/support/faq/installation-guides/linux/ > 2020年4月16日

・TERMINAL INSTALLATION FOR REDHAT / CENTOS / FEDORA
< https://foldingathome.org/faqs/installation-guides/linux/manual-installation-optional-advanced/terminal-installation-for-redhat-centos-fedora/ > 2020年4月16日

・TERMINAL INSTALLATION FOR DEBIAN / MINT / UBUNTU
< https://foldingathome.org/faqs/installation-guides/linux/manual-installation-optional-advanced/terminal-installation-for-debian-mint-ubuntu/ > 2020年4月16日

・MANUAL INSTALLATION (ADVANCED)
< https://foldingathome.org/support/faq/installation-guides/linux/manual-installation-advanced/ > 2020年4月16日

・COMMAND LINE ONLY OPTIONS
< https://foldingathome.org/support/faq/installation-guides/linux/command-line-options/ > 2020年4月16日

・fahclient
< https://download.foldingathome.org/releases/public/release/fahclient/centos-6.7-64bit/v7.5/ > 2020年4月16日


https://download.foldingathome.org/releases/public/release/fahclient/centos-6.7-64bit/v7.5/


・Guide how to run Foldathome and FAHControl and contribute to model cures against COVID-19
< https://forum.manjaro.org/t/guide-how-to-run-foldathome-and-fahcontrol-and-contribute-to-model-cures-against-covid-19/132911 > 2020年4月16日

・Folding@home: FAHClient config & control manual page
< https://forums.anandtech.com/threads/folding-home-fahclient-config-control-manual-page.2574018/ > 2020年4月16日

・LTT Folding Team's Emergency Response to Covid-19
< https://linustechtips.com/main/topic/1164541-ltt-folding-teams-emergency-response-to-covid-19/page/522/ > 2020年4月16日

〇GPU
・Contribute to Coronavirus Research with Folding@home
< https://www.rs-online.com/designspark/contribute-to-coronavirus-research-with-foldinghome > 2020年4月16日

〇DOCKER
・What is Folding@Home? What Are They Trying to Do?
< https://www.percona.com/blog/2020/03/20/covid-19-one-way-to-take-action/ > 2020年4月16日

・covperc/fah By covperc
< https://hub.docker.com/r/covperc/fah > 2020年4月16日


・Folding@home
< https://ja.wikipedia.org/wiki/Folding@home > 2020年4月16日

・Sabayon Linux と分散コンピューティング( Folding@home / Rosetta@home )で COVID-19(新型コロナウイルス感染症)に対抗する
< https://qiita.com/EarthSimilarityIndex/items/f938a89b183a695c3d5f > 2020年4月16日

・Folding@homeを動かしてみた
< https://blog.n-z.jp/blog/2020-03-06-foldingathome.html > 2020年4月16日

〇その他
・topコマンドの使い方・見方
< https://linuxserver.jp/linux/topコマンド/ >

・nice - プログラムを実行する優先度を変更 - Linuxコマンド
< https://webkaru.net/linux/nice-command/ > 2020年4月16日

・Linux - topコマンドでCPU使用率をコア単位で表示する方法
< https://qiita.com/makaaso/items/031bf1559d1c6b10e52d > 2020年4月20日


・ウイルスとの戦いがネット上に: Folding@Home が COVID-19 との戦いのために 1.5 エクサフロップスを達成
< https://blogs.nvidia.co.jp/2020/04/09/foldingathome-exaflop-coronavirus/ > 2020年4月17日

・「Folding@home」の演算能力が1.5EFLOPS超え
< https://pc.watch.impress.co.jp/docs/news/1245535.html > 2020年4月17日

2020年4月12日日曜日

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


<はじめに>

Raspberry pi 4 (4GBメモリモデル)にRaspbian等を搭載していれば、
BOINCというシステムを通して、分散コンピューティングプロジェクトに参加できる。

ここでは、上記システムへのBOINCの導入、Rosetta@homeというタンパク質解析のための分散コンピューティングプロジェクトに参加するための手順を説明している。

現時点(11 Apr 2020, 15:01:59 UTC)で、Rosetta@homeの参加者数、ジョブの数は次のようになっている。
Total queued jobs: 2,880,916
In progress: 1,172,305
Successes last 24h: 900,001
Users  (last day ): 1,343,478 (+594)
Hosts  (last day ): 2,770,801 (+9418)


<ウイルスの持つタンパク質>

タンパク質の立体構造を解析することによって、例えば新型コロナウイルスの表面タンパク質の機能を調べることができるようになる。
また、これにより似通った安定したタンパク質を生み出すことができ、新型コロナウイルスの治療に役立つ情報にすることができるようになる。

<タンパク質と遺伝子とアミノ酸>

タンパク質は、遺伝子によって設計されたアミノ酸配列から成り立っている。
しかしこのアミノ酸配列からどのようなタンパク質の立体構造が成り立つかは、スーパーコンピューターによる解析が必要である。
タンパク質の立体構造は何通りにも考えられるので、その中から最も安定な立体構造を検索して、実際のウイルスのタンパク質の構造を予測する必要がある。

<分散コンピューティングとスーパーコンピューター>

分散コンピューティングでは、プロジェクトに参加したPCに小さなタスクを与えて解析してもらう。
その結果、分散コンピューティングでは、スーパーコンピューター並み、それ以上の計算能力を得られる。
分散コンピューティングへの参加者が増えるほど、研究者は仕事を早くできるようになると考えられる。

Rasberry piを持っていなくても、Windows、Linux、Macなどからも分散コンピューティングへの参加は可能である。
たとえば、folding@homeというプロジェクトがあるのでぐぐってみてください。
【Linux CentOS 7】分散コンピューティングFolding@homeに演算能力を提供する【Folding@home】も参考にしてください。


ここでは、Rasberry pi 4 + Raspbian で、タンパク質の分散コンピューティングプロジェクトであるRosetta@homeに参加する方法を扱う。



■ハードウェア要件の確認

ハードウェア要件
・Raspberry pi 4 or 3 (2GB RAM モデル)以上
・SDメモリが充分にあること。

ここでは、Raspberry pi 4(4GB RAM)を用い、OSはRaspbian(デスクトップ機能あり)が動作している。
OSのインストール手順は、次のページを参考にしてください。

【Raspbian Buster September 2019】OSインストールから初期セットアップ(rootユーザー、SSHログイン、システム更新、ヘッドレス運用、microSD丸ごとバックアップ、リストアなど)



■Raspbianを64bitOSに切り替える。

sudo su でrootになって操作した。
あるいは、上記ページを参考にして、rootのパスワードを設定して、suする。
(以下同様とする。)

○config.txtを編集するので、バックアップをとった。

root@raspberrypi:/home/pi# cp /boot/config.txt /boot/config.txt.org


○(設定変更前の)unameの結果を確認した。

root@raspberrypi:/home/pi# uname -a
Linux raspberrypi 4.19.75-v7l+ #1270 SMP Tue Sep 24 18:51:41 BST 2019 armv7l GNU/Linux
「ARMv7l」アーキテクチャ(32bit)として認識していることがわかる。


(参考として)
Raspberry pi 4 or 3 は、「ARMv8」アーキテクチャの64bit CPUを搭載している。
しかし以上の結果のように、現行のRaspbianはRaspberry pi 4 or 3を「ARMv7l」アーキテクチャ(32bit)として認識している。

「ARMv8」は64bitの”AArch64”実行モードと32bitの”AArch32”実行モードを切り替えて動作できるようになっている。
32bitの”AArch32”実行モードは32bitの「ARMv7」(以前のRaspberry pi に搭載)との互換性を維持する。
現行のRaspbianは以前のRaspberry piでも使用されるため、互換性維持のためにRaspberry pi 4 or 3であっても、デフォルトでは32bitの「ARMv7」として認識されると考えられる。

しかし以下のように設定することによって、現行のRaspbianにおいてもRaspberry pi 4 or 3の持つCPUを「ARMv8」アーキテクチャを持つものとして認識する。


○config.txtを編集した。

最後の行にマークしたように1行追加した。

root@raspberrypi:/home/pi# nano /boot/config.txt
# For more options and information see
# http://rpf.io/configtxt
# Some settings may impact device functionality. See link above for details
# uncomment if you get no picture on HDMI for a default "safe" mode
#hdmi_safe=1
# uncomment this if your display has a black border of unused pixels visible
# and your display can output without overscan
#disable_overscan=1
# uncomment the following to adjust overscan. Use positive numbers if console
# goes off screen, and negative if there is too much border
#overscan_left=16
#overscan_right=16
#overscan_top=16
#overscan_bottom=16
# uncomment to force a console size. By default it will be display's size minus
# overscan.
#framebuffer_width=1280
#framebuffer_height=720
# uncomment if hdmi display is not detected and composite is being output
#hdmi_force_hotplug=1
# uncomment to force a specific HDMI mode (this will force VGA)
#hdmi_group=1
#hdmi_mode=1
# uncomment to force a HDMI mode rather than DVI. This can make audio work in
# DMT (computer monitor) modes
#hdmi_drive=2
# uncomment to increase signal to HDMI, if you have interference, blanking, or
# no display
#config_hdmi_boost=4
# uncomment for composite PAL
#sdtv_mode=2
#uncomment to overclock the arm. 700 MHz is the default.
#arm_freq=800
# Uncomment some or all of these to enable the optional hardware interfaces
#dtparam=i2c_arm=on
#dtparam=i2s=on
#dtparam=spi=on
# Uncomment this to enable infrared communication.
#dtoverlay=gpio-ir,gpio_pin=17
#dtoverlay=gpio-ir-tx,gpio_pin=18
# Additional overlays and parameters are documented /boot/overlays/README
# Enable audio (loads snd_bcm2835)
dtparam=audio=on
[pi4]
# Enable DRM VC4 V3D driver on top of the dispmanx display stack
dtoverlay=vc4-fkms-v3d
max_framebuffers=2
[all]
#dtoverlay=vc4-fkms-v3d
arm_64bit=1

・保存した。(ファイル名が表示されるのでそのままエンターで上書きした。)
[CTRL]+O Write Out
File Name to Write: /boot/config.txt
エンターを押す
[ Wrote 67 lines ]
・nanoを終了した。
[CTRL]+X Exit


○設定の有効化のためにラズパイの再起動を行った。

root@raspberrypi:/home/pi# reboot


○再起動後、sshログインし、rootになった。

○(設定変更後の)unameの結果を確認した。

マークしたように64という文字が確認できた。

root@raspberrypi:/home/pi# uname -a
Linux raspberrypi 4.19.75-v8+ #1270 SMP PREEMPT Tue Sep 24 18:59:17 BST 2019 aarch64 GNU/Linux
”AArch64”実行モードで動作している。



■必要なパッケージのインストールと設定

○boincパッケージのインストール

root@raspberrypi:/home/pi# apt-get update
root@raspberrypi:/home/pi# apt-get install boinc-client boinc-manager boinctui
The following additional packages will be installed:
  libboinc7 libwxbase3.0-0v5 libwxgtk-webview3.0-gtk3-0v5 libwxgtk3.0-gtk3-0v5
Suggested packages:
  boinc-client-opencl boinc-client-nvidia-cuda libgl1-mesa-glx
The following NEW packages will be installed:
  boinc-client boinc-manager libboinc7 libwxbase3.0-0v5 libwxgtk-webview3.0-gtk3-0v5 libwxgtk3.0-gtk3-0v5
0 upgraded, 6 newly installed, 0 to remove and 2 not upgraded.
Need to get 6,662 kB of archives.
After this operation, 23.3 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y

○設定ファイルの編集

下記、緑のマーカー部分を追加した。

root@raspberrypi:/home/pi# nano /etc/boinc-client/cc_config.xml
<!--
This is a minimal configuration file cc_config.xml of the BOINC core client.
For a complete list of all available options and logging flags and their
meaning see: https://boinc.berkeley.edu/wiki/client_configuration
-->
<cc_config>
  <log_flags>
    <task>1</task>
    <file_xfer>1</file_xfer>
    <sched_ops>1</sched_ops>
  </log_flags>
  <options>
    <alt_platform>aarch64-unknown-linux-gnu</alt_platform>
  </options>
</cc_config>
もし、他のマシンで動作しているBOINCマネージャやboinctuiから、このマシンをリモートで管理したい場合には、次の設定も、<options>に加えておくとよい。
ただし、セキュリティーに注意が必要である。家庭のLAN内であれば心配ないのではないか。
<allow_remote_gui_rpc>1</allow_remote_gui_rpc>



システムの再起動を行った。

root@raspberrypi:/home/pi# reboot



■BOINC Managerの起動、タスクの稼働状況確認

下記、デスクトップ環境での操作を取り扱っている。
同様のことは、CUI端末において、boinctui コマンドでも可能である。
(ただし、TUIについてはここでは解説していない。)


ディスプレイの接続されていないRaspberry pi 4でも、
設定すればデスクトップにVNCでリモートアクセスすることができる。
下記ページに設定ためのリンクを載せていますので参考にてください。

【Raspbian Buster September 2019】OSインストールから初期セットアップ(rootユーザー、SSHログイン、システム更新、ヘッドレス運用、microSD丸ごとバックアップ、リストアなど)


<解析タスク割り当て前>

○デスクトップのラズベリーアイコンから、BOINC Manager を起動した。

参考画像のように、ラズベリーアイコンから、System Toolsを辿り、
その中に、BOINC Managerを見つけた。

すると、次のようなウインドウが二つ開いた。

カテゴリーと、プロジェクトを選択した。
参加するプロジェクトは、Rosetta@homeである。

警告が出るがそのまま「Yes」をクリックした。

ログインの必要がある。
初めてなので、「No,new user」を選び、
今後ログインで使う自分のメールアドレスを入力、
そして、パスワードを設定した。

自動でブラウザが起動した。
WEBで、先のアカウント情報をRosettaのシステムに登録した。
(WEBのURLにクエリストリングが含まれていることから、自分のメールアドレスと関連づけられているようである。)



つづいて、チームの参加や作成を促されるページも開くが、
今回は参加も作成も行わないようにした。
そのままブラウザを閉じた。

すぐには、タスクが割り当てられなかった。
「No work available to process」という表示が長い間続いた。
そのまま気長に放置しておいた。(Work が与えられるまで気長に待つ必要がある。)


解析タスクが割り当てられるまで何もすることがない。

boinc-client.serviceの稼働状況の確認を行った。

システムは正常に稼働しているようである。
しかしまだ、タンパク質解析のためのタスクが与えられていない状態だとわかった。

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 Sat 2020-04-11 09:33:50 JST; 28s ago
     Docs: man:boinc(1)
 Main PID: 5087 (boinc)
    Tasks: 2 (limit: 4261)
   Memory: 2.9M
   CGroup: /system.slice/boinc-client.service
           └─5087 /usr/bin/boinc
Apr 11 09:33:50 raspberrypi boinc[5087]: dir_open: Could not open directory 'slots' from '/var/lib/boinc-client'.
Apr 11 09:33:50 raspberrypi boinc[5087]: 11-Apr-2020 09:33:50 [---] Checking active tasks
Apr 11 09:33:50 raspberrypi boinc[5087]: 11-Apr-2020 09:33:50 [---] Setting up GUI RPC socket
Apr 11 09:33:50 raspberrypi boinc[5087]: 11-Apr-2020 09:33:50 [---] gui_rpc_auth.cfg is empty - no GUI RPC password protection
Apr 11 09:33:50 raspberrypi boinc[5087]: 11-Apr-2020 09:33:50 [---] Checking presence of 0 project files
Apr 11 09:33:50 raspberrypi boinc[5087]: 11-Apr-2020 09:33:50 Initialization completed
Apr 11 09:33:50 raspberrypi boinc[5087]: 11-Apr-2020 09:33:50 [Rosetta@home] Sending scheduler request: To fetch work.
Apr 11 09:33:50 raspberrypi boinc[5087]: 11-Apr-2020 09:33:50 [Rosetta@home] Requesting new tasks for CPU
Apr 11 09:33:53 raspberrypi boinc[5087]: 11-Apr-2020 09:33:53 [Rosetta@home] Scheduler request completed: got 0 new tasks
Apr 11 09:33:53 raspberrypi boinc[5087]: 11-Apr-2020 09:33:53 [Rosetta@home] No tasks sent

<解析タスク割り当て後>
後程、タスクが割り当てられ、次のように確認できた。

後程、見てみると、解析中になっていることがわかった。


Advanced View表示をした。

ところで、このBOINC マネージャーがフリーズすることがあったので、
その場合は、次のようにプロセス番号を調べて、番号を指定してkillすればよかった。

root@raspberrypi:/home/pi# ps -u myusername | grep boincmgr
12345 ?        00:00:03 boincmgr
root@raspberrypi:/home/pi# kill 12345


さて、タンパク質の解析中の場合は以下の表示となった。

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 Sat 2020-04-11 09:33:50 JST; 13h ago
     Docs: man:boinc(1)
 Main PID: 5087 (boinc)
    Tasks: 11 (limit: 4261)
   Memory: 3.0G
   CGroup: /system.slice/boinc-client.service
           ├─1222 ../../projects/boinc.bakerlab.org_rosetta/rosetta_for_devices_4.12_aarch64-unknown-linux-gnu -run:protocol jd2_scripting -parser:protocol predicto
           ├─1464 ../../projects/boinc.bakerlab.org_rosetta/rosetta_for_devices_4.12_aarch64-unknown-linux-gnu -run:protocol jd2_scripting @flags_rb_04_11_21136_207
           ├─4110 ../../projects/boinc.bakerlab.org_rosetta/rosetta_for_devices_4.12_aarch64-unknown-linux-gnu -run:protocol jd2_scripting @flags_rb_04_11_21136_207
           └─5087 /usr/bin/boinc
Apr 11 22:27:28 raspberrypi boinc[5087]: 11-Apr-2020 22:27:28 [Rosetta@home] Started upload of *****_Junior_HalfRoid_vs_COVID-19_design1_dev_SAVE_ALL_OUT_NOJRAN_
Apr 11 22:27:34 raspberrypi boinc[5087]: 11-Apr-2020 22:27:34 [Rosetta@home] Finished upload of *****_Junior_HalfRoid_vs_COVID-19_design1_dev_SAVE_ALL_OUT_NOJRAN
Apr 11 22:50:05 raspberrypi boinc[5087]: 11-Apr-2020 22:50:05 [Rosetta@home] Sending scheduler request: To report completed tasks.
Apr 11 22:50:05 raspberrypi boinc[5087]: 11-Apr-2020 22:50:05 [Rosetta@home] Reporting 4 completed tasks
Apr 11 22:50:05 raspberrypi boinc[5087]: 11-Apr-2020 22:50:05 [Rosetta@home] Requesting new tasks for CPU
Apr 11 22:50:07 raspberrypi boinc[5087]: 11-Apr-2020 22:50:07 [Rosetta@home] Scheduler request completed: got 1 new tasks
Apr 11 22:50:09 raspberrypi boinc[5087]: 11-Apr-2020 22:50:09 [Rosetta@home] Started download of *****_Junior_HalfRoid_vs_COVID-19_design1_dev.zip
Apr 11 22:50:09 raspberrypi boinc[5087]: 11-Apr-2020 22:50:09 [Rosetta@home] Started download of *****_Junior_HalfRoid_vs_COVID-19_design1_dev.flags
Apr 11 22:50:11 raspberrypi boinc[5087]: 11-Apr-2020 22:50:11 [Rosetta@home] Finished download of *****_Junior_HalfRoid_vs_COVID-19_design1_dev.flags
Apr 11 22:50:13 raspberrypi boinc[5087]: 11-Apr-2020 22:50:13 [Rosetta@home] Finished download of *****_Junior_HalfRoid_vs_COVID-19_design1_dev.zip

ところで、

必要があれば、USB接続HDDにBOINCワークディレクトリを移動することもできる。
これによって、365日24時間の運用でも、SDの劣化の防止が期待できると考えられる。
次のページを参照してください。

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


以上



<参考>
・Rosetta@home
< https://boinc.bakerlab.org/ > 2020年4月11日

・Set your Processors to ANALYSE for the COVID-19 virus with Folding@Home or Rosetta@Home
< https://www.element14.com/community/thread/75254/l/set-your-processors-to-analyse-for-the-covid-19-virus > 2020年4月11日

・Rosetta@home on Raspbian Pi 4
< https://www.element14.com/community/people/gam3t3ch/blog/2020/04/09/rosettahome-on-raspbian-pi-4 > 2020年4月11日

・Turning Your Raspberry Pi Into a Science Research Station Via BOINC
< https://dzone.com/articles/turning-your-raspberry-pi-into-a-science-research > 2020年4月11日

・How to Fight Coronavirus With Your Raspberry Pi
< https://www.tomshardware.com/how-to/fight-coronavirus-with-raspberry-pi > 2020年4月11日

・E14community チームの情報
< https://boinc.bakerlab.org/rosetta/team_display.php?teamid=19110 > 2020年4月11日

・Raspberry Pi BOINC Tutorial
< https://pimylifeup.com/raspberry-pi-boinc/ > 2020年4月15日

・Controlling BOINC remotely
< https://boinc.berkeley.edu/wiki/Controlling_BOINC_remotely > 2020年4月25日


〇CPUアーキテクチャについて

・ARM、64ビットアーキテクチャ「ARMv8」の概要を公開
< https://news.mynavi.jp/article/20111031-arm_v8/2 > 2020年4月15日

・ARMアーキテクチャ
< https://ja.wikipedia.org/wiki/ARMアーキテクチャ > 2020年4月15日

・ARM64 on Raspberry Pi 4
< http://marksrpicluster.blogspot.com/2019/12/arm64-on-raspberry-pi-4.html > 2020年4月15日

・armv7とarm64とarmhfの違い
< https://teratail.com/questions/190228 > 2020年4月15日

・ARM、64bit化される次世代アーキテクチャー「ARMv8」を発表
< https://ascii.jp/elem/000/000/645/645995/ > 2020年4月15日



投げ銭

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

Ad

Ad