自主的20%るぅる

各々が自主的に好き勝手書くゆるふわ会社ブログ

Raspberry Pi 3 Model BにインストールしたCentOS7にUSB接続な外付けストレージを追加してみる

ディスクが不安だよ(´・ω・`)

適当な空き時間を見繕って構築中の社内Labプロジェクトですが、前回のエントリでひとまず環境が整いました。

……が、一点不安なことが……。それは、ストレージ周り!

Raspberry PiはSDカード以外のストレージデバイスを持っていないので……

  • 容量の不足
  • 書き込み回数上限

といった懸念事項と向き合う必要があります。

これらの対処法として一番手っ取り早いのは、「ストレージを追加する」って方法ですね。

幸いにもRaspberry PiにはUSB2.0のポートが4つ用意されています。今回はUSBな外付けストレージを追加していきたいと思うです。

最初に注意事項

USBポートに外付けのHDDとかを単純に繋ぐ……って所からスタートするのですが、環境によってはラズパイの動作が不安定になる可能性があるらしいです。

電源の供給量が限られているので、電力消費の激しい系デバイスを接続するとアレになってしまうケースがあるそうで。

ラズパイが再起動したり、ストレージ等の認識が不安定だったりするときは、この電力不足を疑うといいかも……?1)
本体についている赤色のLED(PWR)が点滅していたり、消灯しているときはその兆候

対処法としてはセルフパワー型のUSBハブ2)USBハブ自体にACアダプタとかさせる奴を間に挟んだり、電源付きの外付けストレージをチョイスするなどすればよさげですね。

要は外付けストレージの電源周りをラズパイに依存しないようにすればOK。

USBポートに外付けストレージを接続!

今回は、家に転がっていたUSB HDD/SSDケースと80GBくらいのSSDを使ってみたいと思います。

どのご家庭でも余っている普通のものですね(`・ω・´)b

普通の外付けUSBストレージとして機能するように組み立てたら、何も考えずにUSBポートに接続します。

そして、ラズパイにSSHでログインして、下記のコマンドを打ってみます。

[user1@centos-rpi3 ~]$ dmesg
(中略)
[61202.159663] usb 1-1.3: new high-speed USB device number 4 using dwc_otg
[61202.351460] usb 1-1.3: New USB device found, idVendor=174c, idProduct=5106
[61202.351672] usb 1-1.3: New USB device strings: Mfr=2, Product=3, SerialNumber=1
[61202.351873] usb 1-1.3: Product: USB3.0 DEVICE
[61202.351998] usb 1-1.3: Manufacturer: Generic
[61202.352118] usb 1-1.3: SerialNumber: A0000000000000000002
[61202.353240] usb-storage 1-1.3:1.0: USB Mass Storage device detected
[61202.355834] scsi host0: usb-storage 1-1.3:1.0
[61203.350761] scsi 0:0:0:0: Direct-Access     INTEL SS DSA2MH080G1HP    045C PQ: 0 ANSI: 5
[61203.352382] sd 0:0:0:0: [sda] 156301488 512-byte logical blocks: (80.0 GB/74.5 GiB)
[61203.353125] sd 0:0:0:0: [sda] Write Protect is off
[61203.353283] sd 0:0:0:0: [sda] Mode Sense: 23 00 00 00
[61203.353784] sd 0:0:0:0: [sda] No Caching mode page found
[61203.353950] sd 0:0:0:0: [sda] Assuming drive cache: write through
[61203.365555]  sda: sda1 sda2
[61203.368336] sd 0:0:0:0: [sda] Attached SCSI disk
[61203.375033] sd 0:0:0:0: Attached scsi generic sg0 type 0

ここで注目すべきは、

  • ストレージがちゃんと認識されているか
  • どのデバイス名で認識されているか

の2点ですね。

上記は手元の環境で実行した例ですが、しっかりと認識しており、「sda」というデバイス名でアクセス可能であることがわかります。

一旦立ち止まって……

続きの作業をするまえに、方針を決めましょう。

単純にストレージの容量を増やしたいだけなら、LinuxのLVM(Logigal Volume Manager)に組み込んじゃうって手もありますね。

しかし、いくらClass10のSDカードとはいえ、性質の異なるSSDと混ぜるのはちょっと怖い。

……ということで、普通にマウントしてしまいましょう(`・ω・´)b

まずは真っ白に

とりあえず、そこら辺に転がっていたストレージなので、中身を真っ白にしましょう。

最初に、「fdisk -l」ってコマンドで、現状どうなってるかをチェックします。

[user1@centos-rpi3 ~]$ sudo fdisk -l
(中略)
Disk /dev/sda: 80.0 GB, 80026361856 bytes, 156301488 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: gpt


#         Start          End    Size  Type            Name
 1           40       409639    200M  EFI System      EFI System Partition
 2       409640    156039303   74.2G  Apple HFS/HFS+  AirMacExtreme_TimeMachene

今回拾ってきたSSDは、AirMac Extreme3)っていう、Apple社製の無線LAN APのUSBポートに繋いでたモノ。なので、それっぽいアレになってますね。

コイツらは邪魔者以外のなにものでもないので、この世から消し去ります。

こんな感じで。

[user1@centos-rpi3 ~]$ sudo fdisk /dev/sda
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


コマンド (m でヘルプ): d
パーティション番号 (1,2, default 2): 1
Partition 1 is deleted

コマンド (m でヘルプ): d
Selected partition 2
Partition 2 is deleted

コマンド (m でヘルプ): w
パーティションテーブルは変更されました!

ioctl() を呼び出してパーティションテーブルを再読込みします。
ディスクを同期しています。
[user1@centos-rpi3 ~]$

たまたまパーティションが2つあったので、その両方を「d」コマンドで消し去って、「w」コマンドでディスクに書き込む……って流れですね。

パーティションを新設する

新たにラズパイ用のパーティションを作成します。

例えばこんな感じで。

[haya@centos-rpi3 ~]$ sudo fdisk /dev/sda
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


コマンド (m でヘルプ): p

Disk /dev/sda: 80.0 GB, 80026361856 bytes, 156301488 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: gpt


#         Start          End    Size  Type            Name

コマンド (m でヘルプ): n
パーティション番号 (1-128, default 1): 1
First sector (34-156301454, default 2048): 34
Last sector, +sectors or +size{K,M,G,T,P} (34-156301454, default 156301454): 156301454
Created partition 1


コマンド (m でヘルプ): p

Disk /dev/sda: 80.0 GB, 80026361856 bytes, 156301488 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: gpt


#         Start          End    Size  Type            Name
 1           34    156301454   74.5G  Linux filesyste

コマンド (m でヘルプ): w
パーティションテーブルは変更されました!

ioctl() を呼び出してパーティションテーブルを再読込みします。
ディスクを同期しています。

流れ的には

  • 最初に「p」コマンドで何も無いことを確認
  • 「n」コマンドで新規パーティションを作成(パーティションNo:1、セクタの指定はフルで)
  • 「p」コマンドで意図した感じになっていることを確認
  • 「w」コマンドで書き込み

って感じですね。

ここで作成したパーティションへは「/dev/sda1」でアクセスできます。

パーティションをフォーマットする

まだ、ラズパイ(ってか、Linux)では使えない状態なので、何らかのファイルシステムを作る必要があります。いわゆるフォーマットって奴ですかね。

いろいろと選択肢はあるんですけど、今回は「ext4」で行きましょう。「mkfs.ext4」ってコマンドでできます。

[user1@centos-rpi3 ~]$ sudo mkfs.ext4 /dev/sda1
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
4890624 inodes, 19537677 blocks
976883 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2168455168
597 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
	4096000, 7962624, 11239424

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

[user1@centos-rpi3 ~]$

これで先ほど作成したパーティション(/dev/sda1)をext4なファイルシステムでフォーマットできました。

マウントする

ここまできたら、後はマウントするだけです。

最初にマウントポイントを作りましょう。

[user1@centos-rpi3 ~]$ sudo mkdir -p /mnt/disk1

どこでもいいんですけど、今回は「/mnt」ディレクトリ内に「disk1」ってディレクトリを作りました。それをマウントポイントにします。

続いて、手動でマウントしてみます。

[user1@centos-rpi3 ~]$ sudo mount -t ext4 /dev/sda1 /mnt/disk1/

これでマウントできたはずなので、確認してみます。

[user1@centos-rpi3 ~]$ sudo mount
(中略)
/dev/sda1 on /mnt/disk1 type ext4 (rw,relatime,data=ordered)
[user1@centos-rpi3 disk1]$ df -aH
ファイルシス   サイズ  使用  残り 使用% マウント位置
(中略)
/dev/sda1         79G   55M   75G    1% /mnt/disk1

はい、ちゃんとマウントできてますね(`・ω・´)b

再起動してもマウントされるようにする

このままだと再起動するとマウントが解除されてしまうので、ブート時に自動マウントされるよう設定します。

下記コマンドで/etc/fstabを開いて……

[user1@centos-rpi3 ~]$ vi /etc/fstab

ファイルの末尾に下記のように追記します。

/dev/sda1 /mnt/disk1 ext4 defaults 0 0

これをやった後に再起動してみてマウントされていればOK!

注訳はこちら   [ + ]

1.
本体についている赤色のLED(PWR)が点滅していたり、消灯しているときはその兆候
2. USBハブ自体にACアダプタとかさせる奴
3. っていう、Apple社製の無線LAN AP
Let’s share this article!

{ 関連記事 }

{ この記事を書いた人 }

Yuta Hayakawa
Yuta Hayakawa

2016年6月入社。執行役員。社内システムチーム統括。

普段は東京本社で管理職のお仕事したり、広報的役割としてテキスト書いたり動画作ったりするのが最近のお仕事。

自称「社内システムチーム統括」として、社内システムチームの面々を見守りつつ毎日を過ごしています。

プライベート面では、音楽やコンピュータ関連、ゴルハム&ジャンハム関係、ゲーム関係が興味あるポイント。

記事一覧