ラズパイに外付けHDD(SSD)を接続する方法を徹底解説 – フォーマット、パーティション作成、マウント方法など |じょるブログ

じょるブログ

電子工作やプログラミング関連の情報を発信している技術系ブログ

ラズベリーパイ 設定

ラズパイに外付けHDD(SSD)を接続する方法を徹底解説 – フォーマット、パーティション作成、マウント方法など

投稿日:

今回はラズパイでNAS(ファイルサーバー)を構築するために外付けHDDを購入したので、ラズパイで外付けHDDが使用できるようにする方法について解説します。(外付けSSDの接続方法も外付けHDDと同じです。)

   

必要なもの

  • ラズパイ

私は家に余っていたラズパイ3Bを使用しましたが、通信速度の関係上ラズパイ4の方がいいと思います。速度を気にしないのであれば3Bで十分です。

※初めてラズパイを使用する方は、ラズパイ用の電源、SDカードが必要です。

 

  • 外付けHDD(または外付けSSD)

後述しますが、2TBを超える容量だと追加の設定(パーティションの管理情報のフォーマットをGPTに変更)が必要になります。
また、外付けHDDは稼働中の消費電力が意外と高く、USB給電式のものだとラズパイが電源不足になってしまう可能性があるため下記のような外部電源を使用したものの方がいいと思います。

 

  

今回行ったこと

4TBの外付けHDDを使用し、パーティションを2つに分けWindows用のNTFSのパーティションと、Mac・LINUX 用にext4のパーティションを作成しました。

NTFSはクラッシュなどの耐久性に優れているので、1つのパーティションにして4TB全てをNTFSにしても良かったのですが、NTFSはWindows用のファイルシステムなのでLINUX のアクセス権の設定はできません。そのため、LINUXやMac、androidスマホのデータをNTFSに保存するとアクセス権が保持されずに保存されてしまいます。そこまで問題にはなりませんが個人的にちょっときになるので、LINUX 系のデータ保存用のパーティションとしてext4のパーティションも作成しました。

今回はこのように2つのパーティションを作成しましたが、この記事ではパーティションを1つだけ作成する方法についても解説します。

  

設定の流れ・用語解説

  1.  ラズパイの初期設定
  2.  外付けHDDをラズパイに接続
  3.  HDDのフォーマット(ファイルシステム設定・パーティション作成)
  4.  パーティションのフォーマット
  5.  HDDをラズパイへマウント

所要時間:約20分

HDDを使用するにはまず、HDDの中にパーティションというものを作成する必要があります。このパーティションの中にデータを保存していくのですが、データの保存の仕方(ファイルシステム)は何種類もあるため、どのファイルシステムを使用するかを決める必要があります。今回はパーティションを2つ作成し、各パーティションにNTFSとext4というファイルシステムを適用させます。

また、HDDにはこれらの設定(パーティションの管理情報)を保存する部分があり、その設定の保存方法がMBRとGPTの2種類あります。MBRでは2TB分の情報しか管理できないため、2TBを超える容量のHDDを使用する場合は2TB以上の管理情報も扱えるGPTでフォーマットする必要があります。

HDDをフォーマットするコマンドにはfdiskやpartedなどがありますが、このうちGPTでフォーマットできるのはpartedだけなので今回はこちらを使用します。
※partedではGPTだけでなく、MBRでもフォーマット可能です。

   

実行手順

ラズパイの初期設定

Rasbian OS のインストール

まず、ラズパイの初期セットアップ(Rasbian OS のインストール)を行います。ラズパイを扱うのが初めての方は以下の記事を参考にして、ラズパイが起動できる状態にしてください。

※もうすでにOSのインストールが完了している方は次に進んでください。

必要なパッケージのインストール

ラズパイの起動までできたら、SSHやVNCでラズパイにアクセスしコマンドプロンプトを開き、以下のコマンドを実行してntfs-3gパッケージをインストールしてください。

sudo apt update
sudo apt upgrade
sudo apt install ntfs-3g

ntfs-3gパッケージはLinuxからNTFSを扱えるようにする(書き込むことができるようにする)ドライバーです。デフォルトではLinuxからNTFSのデータを読み込むことは可能ですが、書き込むことができません。

以下のコマンドで正しくインストールできたか確認します。

sudo apt list | grep ntfs-3g

    

  

外付けHDDをラズパイに接続

まず、ラズパイ側でHDDを認識できるようにするためにパソコン等を使用して、使用する外付けHDDをフォーマットしてください。
後でラズパイからフォーマットし直すのでファイルシステムなどは適当で大丈夫です。
※フォーマットをしなくてもラズパイ側で認識できる場合もあります。その場合はこのフォーマットは行わなくても大丈夫です。

フォーマットしたらラズパイに差し込みます。
※ラズパイ4の場合は、通信速度が速い青いUSB端子(USB3.0)の方に差し込むことをお勧めします。

差し込んだら、以下のコマンドを実行して、表示される容量などを参考に正しく認識されているか確認します。

sudo fdisk -l

以下のように表示されるので、差し込んだHDDのパス( /dev/sda と書かれている部分)を確認します。私の場合は/dev/sdaでしたが、この名前は環境によって異なる場合があります。

・
・
・

Disk /dev/sda: 3.7 TiB, 4000787030016 bytes, 7814037168 sectors
Disk model: HDCZ-UT         
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: B15DED0B-9FF8-4CD4-A64E-D36CBE380E3E

Device      Start        End    Sectors  Size Type
/dev/sda1      34     262177     262144  128M Microsoft reserved
/dev/sda2  264192 7814036063 7813771872  3.7T Microsoft basic data

(/dev/sdaがHDD本体で、/dev/sda1や/dev/sda2がパーティションです。)

  

HDDのフォーマット(GPTへの変更・ファイルシステムの設定)

まず、以下のコマンドでpartedを起動します。
※/dev/sda の部分はご自身の環境に合わせて編集してください。

sudo parted /dev/sda

実行すると以下のようなことが表示されます。

GNU Parted 3.2
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted)                                                               

表示されたら、(parted)の後ろにpと入力しHDDの情報を表示させます。

GNU Parted 3.2
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p                                                                
Model: I-O DATA HDCZ-UT (scsi)
Disk /dev/sda: 4001GB
Sector size (logical/physical): 512B/4096B
Partition Table: loop
Disk Flags: 

Number  Start   End     Size    File system  Name                          Flags
 1      17.4kB  16.8MB  16.8MB               Microsoft reserved partition  msftres
 2      16.8MB  4001GB  4001GB               Basic data partition          msftdata

出力結果の Partition Table の部分がGPT以外になっていたら以下のコマンドでGPTに変更します。

(parted) mklabel gpt

もしこの時以下のようなエラーが表示された場合、パーティションに対してpartedコマンドを実行している可能性が高いので、パスをもう一度確認してやり直してください。
(※例:sudo parted /dev/sda2 というようにして実行している。解決法:sudo parted /dev/sda というようにして実行し直す。)

(parted) mklabel gpt
Warning: The existing disk label on /dev/sda2 will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? Yes                                                               
Error: Partition(s) 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64 on /dev/sda2 have been written, but we have been
unable to inform the kernel of the change, probably because it/they are in use.  As a result, the old partition(s) will remain in use.  You should reboot now
before making further changes.
Ignore/Cancel?

もう一度pと入力してgptに変わっているか確認します。

(parted) p                                                                
Model: I-O DATA HDCZ-UT (scsi)
Disk /dev/sda: 4001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name                          Flags
 1      17.4kB  16.8MB  16.8MB               Microsoft reserved partition  msftres
 2      16.8MB  4001GB  4001GB               Basic data partition          msftdata

gptになっていることができたら、以下のコマンドで、今存在するパーティションを削除します。

(parted) rm 1
(parted) rm 2

(parted) pの出力結果を見てみると、私の場合2つパーティションが存在していたので、この2つのパーティションを削除しました。

もう一度(parted) pと実行し、削除されたか確認します。

(parted) p                                                                
Model: I-O DATA HDCZ-UT (scsi)
Disk /dev/sda: 4001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags: 

Number  Start  End  Size  File system  Name  Flags

(parted)

削除できていることが確認出来たら、(parted)quitと実行し、partedを終了します。

次に、以下のコマンドを実行してパーティションを作成します。
※/dev/sda の部分はご自身の環境に合わせて編集してください。

sudo parted -a optimal /dev/sda mkpart primary ntfs 0% 50%

このコマンドは、/dev/sdaのHDDのHDD容量が0%から50%の部分(0~2TBの部分)を1つのパーティションとし、そのパーティションをntfsというファイルシステムでフォーマットするという意味です。

※パーティションを1つだけ作成したい場合は、50%の部分を100%に変えて実行してください。

私は2つパーティションを作成するため、以下のコマンドを実行し、2つ目のパーティションも作成しました。

sudo parted -a optimal /dev/sda mkpart primary ext4 50% 100%

パーティションを作成したら、正しくパーティションが作成できているか確認します。

sudo fdisk -l

出力結果↓

pi@raspberrypi:~ $ sudo fdisk -l
・
・
・

Disk /dev/sda: 3.7 TiB, 4000787030016 bytes, 7814037168 sectors
Disk model: HDCZ-UT         
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 19D518C3-1F4D-45F1-A299-A6ACC31F8B5B

Device          Start        End    Sectors  Size Type
/dev/sda1        2048 3907018751 3907016704  1.8T 
Microsoft basic data
/dev/sda2  3907018752 7814035455 3907016704  1.8T Linux filesystem
pi@raspberrypi:~ $

NTFSでフォーマットした場合、Typeというところが Microsoft basic data と表記されていれば成功です。

  

パーティション内のフォーマット

続いて、以下のコマンドでパーティション内のフォーマットを実行します。

sudo mkfs -t ntfs -Q -L NAS-ntfs /dev/sda1

-t の後にファイルシステムを、-L の後にパーティションのラベルを(パソコンに接続したときに表示されたりする名前です。省略することもできます。)、最後にパーティションのパスを入力します。ちなみに、NTFSでフォーマットする場合、-Q オプションを指定するとクイックフォーマットでフォーマットされます。

パーティションを2つ作成した場合は2つ目も同様にフォーマットします。

sudo mkfs -t ext4 -L NAS-ext4 /dev/sda2

私の場合は2つ目のパーティションはext4にしたので、上記のようにext4を指定して実行しました。ext4の場合は-Q オプションは使用できません。

   

HDDをラズパイへマウント

続いて、HDDをラズパイにマウントし、HDDをラズパイ上のディレクトリと紐づけます。

まずは紐づけ先のディレクトリを作成します。

sudo mkdir /mnt/NAS
sudo mkdir /mnt/NAS/ntfs-win
sudo mkdir /mnt/NAS/ext4-lin

今回は作成した2つのパーティションを別々のディレクトリにマウントしたいため、/mnt/NAS/ntfs-win と /mnt/NAS/ext4-lin というディレクトリを作成しました。1つだけしかパーティションを作成していない場合は1つだけディレクトリを作成してください。

次に、最初の方に行った以下のコマンドでパーティションのパスを確認します。

sudo fdisk -l

確認したら、以下のコマンドでマウントします。

sudo mount /dev/sda1 /mnt/NAS/ntfs-win
sudo mount /dev/sda2 /mnt/NAS/ext4-lin

mount の1番目の引数(/dev/sda1の部分)には先ほど確認したパーティションのパスを、2番目の引数(/mnt/NAS/ntfs-winの部分)には先ほど作成したディレクトリのパスを入力して実行してください。

こちらも同様に、1つだけしかパーティションを作成していない場合は1つだけマウントしてください。

正しくマウントできたか以下のコマンドで確認します。

df -Th

出力結果↓

ファイルシス   タイプ   サイズ  使用  残り 使用% マウント位置
/dev/root      ext4        15G  4.9G  8.9G   36% /
devtmpfs       devtmpfs   431M     0  431M    0% /dev

/dev/mmcblk0p1 vfat       253M   53M  200M   21% /boot
tmpfs          tmpfs       93M     0   93M    0% /run/user/1000
/dev/sda1      fuseblk    1.9T  123M  1.9T    1% /mnt/NAS/ntfs-win
/dev/sda2      ext4       1.8T   77M  1.7T    1% /mnt/NAS/ext4-lin

マウントはラズパイをシャットダウンすると解除されてしまうので、ラズパイが起動するたびにマウントを行うように設定ファイルに記述します。

その設定に必要な UUID を以下のコマンドで確認します。

sudo blkid

出力結果↓

/dev/mmcblk0p1: LABEL_FATBOOT="boot" LABEL="boot" UUID="9341-C7E5" TYPE="vfat" PARTUUID="ed04d6-01"
/dev/mmcblk0p2: LABEL="rootfs" UUID="801af6-21c9-48a0-9df5-cffb60cf79af" TYPE="ext4" PARTUUID="ea04d6-02"
/dev/sda1: LABEL="NAS-ntfs" UUID="54H72B027FC" TYPE="ntfs" PTTYPE="dos" PARTLABEL="primary" PARTUUID="a56759-2730-4d19-a1bc-8e84ce3"
/dev/sda2: LABEL="NAS-ext4" UUID="r50e4-e715-4de2-b5c9-371b50" TYPE="ext4" PARTLABEL="primary" PARTUUID="8dde-527e-4bcd-ac49-fcbae8"
/dev/mmcblk0: PTUUID="ed0557d6" PTTYPE="dos"

UUID を確認したら以下のコマンドで設定ファイルを編集します。

sudo nano /etc/fstab
roc            /proc           proc    defaults          0       0
PARTUUID=ed04d6-01  /boot           vfat    defaults          0       2
PARTUUID=ea04d6-02  /               ext4    defaults,noatime  0       1
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that
UUID="54H72B027FC" /mnt/NAS/ntfs-win ntfs-3g defaults,nofail 0 0
UUID="r50e4-e715-4de2-b5c9-371b50" /mnt/NAS/ext4-lin ext4    defaults,nofail 0 0

上記のように、スクリプトの最終行に、

UUID マウント位置 ファイルシステム defaults,nofail 0 0

というように記載してください。

ファイルシステムは、ntfs の場合は ntfs-3g と入力してください。

defaults,nofail の部分ではオプション設定部分で、defaults というのが デフォルトのオプション設定を行うという意味で、nofail というのはマウント失敗時でも起動を続行するという意味です。
※このnofailを指定せずにマウントに失敗した場合ラズパイが起動しなくなります。

5番目の項目は、dumpコマンド実行時にバックアップ対象にするかという項目です。0を指定するとバックアップ対象にならなくなります。

6番目の項目は、ラズパイ起動時に行われるfsckコマンドによるファイルチェックを行う順番の設定です。0を指定するとチェックされなくなります。

最後に、再起動を行い df -Th を実行して正しくマウントできているか確認してください。

google ads




google ads




-ラズベリーパイ, 設定

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


関連記事

大学生の電子工作 スマートリモコン(プログラム)

この記事ではスマートリモコンを作ってみたで紹介したスマートリモコンのプログラムを記載していきます。回路はスマートリモコン(回路)に記載してあります。今回作成するプログラムは以下の4つです。 (LED点 …

ラズパイで SPI 7セグLED Module 8 Digital を使ってみた

半年ほど就活に専念するため、ブログの更新をしていませんでしたが、なんとか就活の方が落ち着いてきたのでまたブログを再開しようと思います。 就活中はブログは一時中断していましたが、電子工作の方は続けていた …

簡単にRasberryPi Zero WH へ node.js, npmを入れる方法

  はじめに  スマートリモコンでPS4を操作するためにはps4-wakerというパッケージが必要であり、これをインストールするにはnode.jsのパッケージ管理ツールであるnpmをインストールする必 …

電子工作 ラズパイで玄関モニター(兼防犯カメラ)作ってみた

今回は前回のスマートリモコンに続き、2回目のIoTデバイス制作です。玄関モニター兼防犯カメラを作ってみました。作成難易度はスマートリモコンよりも簡単ですので皆さんも是非作ってみてください! 玄関モニタ …

Google Apps Scriptを使用してスプレッドシート上の図形を押した際に、プログラムを実行させる

    大学生の電子工作 ラズパイでスマートロック作ってみた⑤の記事に関連して、スプレッドシート上に設置したボタンを押した際に Google Apps Scriptを用いたプログラムを実行することで、 …




関連記事