ファイルサーバーとして使用している自宅サーバー(Linux)のハードディスクが満杯になってしまったため、HDDを1TBから4TBのものに交換してみました。Linuxでのパーティション設定やファイルシステムの作成、データ移行からマウントまで全手順をまとめておきます。
なお、今回のサーバーはCentOS7ですが、UbuntuなどのDebian系でもまったく同じ手順です。
サーバーのディスクを1TBx2本→4TBx2本に強化!
もともとのサーバーのディスク構成がこちらです。OS用の320GBとデータ用HDD1TB2本で構成していました。
今回はOS用のHDDはそのままに、データ用の1TB2本を4TB2本に交換していきます。
購入したのはWD Blueシリーズの4TBモデル「WD40EZAZ-EC」です。
メインとバックアップ用をあわせて、2台購入しました。相場8,000円ほどの製品ですが、初売りセール中でしたので、なんと1台6,700円で購入することができました。かなりお安く入手することができたと思います。
なぜか箱のセロハンテープが切られていましたが、中身は個別梱包されており、問題ありませんでした。
ディスクを交換する
まずは新しいディスクに交換していきましょう。
ベースマシンはemachines J4517というモデルです。もともとWindows VistaのPCとして使っていたものですが、現在はCentOS7をインストールし、自宅サーバーとして活用しています。マイナーなメーカーですが、Core2 Duo E7200+メモリ2GBとLinuxのサーバーとして動作させる上では十分すぎるスペックで、特に不満はありません。
ミニタワー型で内部には3.5インチベイが2つ搭載されています。
仕様表には3.5インチ2本しか搭載できないと記載されていますが、実際はカードリーダー後ろのスペースにも3.5インチのHDDが1本搭載できます。また、5インチベイも2つ用意されているため、マウンタを使えばさらに2本のHDDを搭載できます。トータル5本のハードディスクを搭載できるという、意外と高い拡張性を持っています。
今回はもともとカードリーダーの後ろに搭載していたバックアップ用の1TBを取り外し、4TBに交換します。そしてパーティションなどの設定を済ませ、メインで使用していた3.5インチベイの1TBからデータを移行し、正常にデータの移行ができたらもともとの1TBから配線を取り外し、4TBのディスクをメインのデータディスクとして使用できるようにしたいと思います。
SATAケーブルでHDDとマザーボードを接続します。
電源ケーブルも接続します。
なお、接続についてはコネクタの形状が合致するところに接続すればOKです。パソコンのコネクタはフールプルーフに基づいた設計になっており、接続していけないところには最初からコネクタが刺さらないようになっています。しっかり差し込めれば正しく配線されているので、安心してください。
ケーブルの本数が足りないときは別途購入しましょう。
ちなみにSATAケーブルや電源関係のケーブルは、ハードオフなどの中古ショップでもかなりお安く入手することが可能です。100円/本くらいで安価に販売されていますので、近くにあるなら一度行ってみることをおすすめします。
ディスクが認識されているか確認してみる
ディスクの設置が完了したら、サーバーの電源を入れます。
Linuxが起動したらコンソールにログインし、ディスクが正常に認識されているか確認します。以降の操作はsudoをつけるか、root権限で行う必要があります。
今回はディスクのセットアップにpartedを使用していきます。
partedはfdiskに次ぐ次世代のディスク管理ツールであり、従来のMBRによるディスク管理のほか、GPTでのディスク管理に対応しています。2TB以上のディスクを使用するにはGPTでのディスク管理が必須となっているため、partedでのセットアップが推奨されています。このため、今回もpartedを使って設定を進めていきます。
partedのマニュアル→https://linux.die.net/man/8/parted
まず、partedを使ってディスクの一覧を表示してみましょう。
sudo parted -l
/dev/sdaや/dev/sdbというのがディスクの名前です。各種コマンドの実行時などディスクを指定したいときは、これらのパスを指定します。また、各ディスクに表示されている表はそのディスクに存在するパーティションを示しています。パーティションはディスク名+番号で表します。例えば、/dev/sdaの1番パーティションになんらかの変更を行いたい場合は、/dev/sda1というように指定します。
なお、ディスクのパスは環境により変化することがあります。例えば、マザーボード上でSATAケーブルをつなぐ場所を変更して再起動すると、同じディスクでもパスが変わることがありますので、十分注意する必要があります。
間違ったディスクを選択してしまうと、データが飛んでしまいます。正しいディスク(パーティション)に対して操作しているか、こまめに確認しながら作業しましょう。
今回追加したディスクは/dev/sdcとして正常に認識されていることが確認できます。「ディスクラベルが認識できません」というエラーが表示されていますが、これはセットアップが済んでいないためであり、現時点では問題ありません。以降、/dev/sdcに対しセットアップを行っていきます。
パーティションを作成する
ディスクが認識されていることが確認できたら、いよいよHDDのセットアップを行っていきます。
まず、パーティションを作成していきます。追加したディスクを引数に指定し、partedを起動します。
sudo parted /dev/sdc
#ディスクの情報を表示する
(parted)print
正しいディスクが選択されているか確認するため、一度printコマンドを実行します。
問題なければ次へ進みます。
selectコマンドを実行し、新しく追加したハードディスクを選択します。
(parted) select
新しいデバイス? [/dev/sdc]?
/dev/sdc を使用
もう一度printを実行し、正しく選択されているか確認しましょう。間違ったディスクを選択していると、データが飛んでしまいますので、マメに確認することが重要です。
(parted) p
エラー: /dev/sdc: ディスクラベルが認識できません。
モデル: ATA WDC WD40EZAZ-00S (scsi)
ディスク /dev/sdc: 4001GB
セクタサイズ (論理/物理): 512B/4096B
パーティションテーブル: unknown
ディスクフラグ:
正しく認識されています。
はじめにラベルを作成します。MBRでは最大2TBしかサポートされないため、GPTでラベルを作成します。2TB以下のディスクであっても、基本的にはGPTを選択してください。
(parted) mklabel gpt
メッセージが表示されなければ、正常にラベルが作成されました。
つづけて、パーティションを作成していきます。
パーティションの作成はmkpartコマンドで行います。対話的に実行できるため、質問に答える形でひとつずつ設定していきます。
(parted) mkpart
パーティションの名前? []?
ファイルシステムの種類? [ext2]? ext4
開始? 0%
終了? 100%
まず、パーティションの名前を問われます。名前を設定しておくことで、パーティションテーブルを表示した際にどのパーティションであるか判別しやすくなります。操作ミスを防止するうえでは設定しておいたほうがよさそうですが、今回は1つしかパーティションを作成しないため、ここでは空のままにしておきました。
次にファイルシステムの種類を問われます。
Linuxではさまざまなファイルシステムを選択することができ、おもにext4かxfsから選択するのが一般的です。ext4はCentOS6で標準採用されていたファイルシステムで、長年の実績があり、安定しているのが特徴です。削除したファイルも比較的容易に復旧することができたりと安心感があります。
一方、xfsはCentOS7で標準採用されるようになったファイルシステムで、読み書きが高速であることが特徴です。しかし、メモリの消費が多かったり、小さいサイズのファイルの読み書きが遅いとも言われています。また、ext4とは異なり、削除してしまったファイルの復旧は困難であるため、万が一の操作ミスにも対応できる厳重なバックアップが要求されます。
ファイルシステムについてはいろいろと悩みましたが、最終的には手堅くext4を選択することにしました。個人的にはext4は長くに渡って使用してきた経緯があり、最も信頼を置いているファイルシステムということで、安心をとってext4を選択しました。
最後に開始と終了を入力します。今回はディスク領域すべてを1つのパーティションに割り当てるため、開始は0%、終了は100%としました。
このとき「%」も必ず入力してください。
「%」がないとセクタ単位での指定となってしまいます。
以上でパーティションの作成は終了です。print(またはp)を実行して、パーティションを確認してみます。
(parted) p
モデル: ATA WDC WD40EZAZ-00S (scsi)
ディスク /dev/sdc: 4001GB
セクタサイズ (論理/物理): 512B/4096B
パーティションテーブル: gpt
ディスクフラグ:
番号 開始 終了 サイズ ファイルシステム 名前 フラグ
1 1049kB 4001GB 4001GB
正しくパーティションが作成されています。
なお、この時点ではファイルシステムは空欄で問題ありません。ファイルシステムの作成は次のステップで行います。
以上でpartedでの操作は終了です。qでpartedを終了させましょう。
(parted)q
ファイルシステムの作成
次にファイルシステムを作成します。
ディスクはパーティションを作成しただけでは使用することはできません。実際にファイルを保存できるようにするには、作成したパーティションにファイルシステムを作成する必要があります。
ファイルシステムの作成にはmkfsコマンドを使用します。mkfsコマンドには複数の種類があり、今回はext4でファイルシステムを作成するため、mkfs.ext4コマンドを使用します。
作成したパーティションを引数に指定し、mkfs.ext4コマンドを実行しましょう。
$mkfs.ext4 /dev/sdc1
先述しましたが、指定するのはパーティションですので数字まで含めたパスを指定します。/dev/sdcはディスク名、パーティション名は/dev/sdc1になります。
先ほども確認しましたが、もう一度partedでパーティションを確認してみましょう。
$sudo parted -l
モデル: ATA WDC WD40EZAZ-00S (scsi)
ディスク /dev/sdc: 4001GB
セクタサイズ (論理/物理): 512B/4096B
パーティションテーブル: gpt
ディスクフラグ:
番号 開始 終了 サイズ ファイルシステム 名前 フラグ
1 1049kB 4001GB 4001GB ext4
今度はファイルシステムの欄にext4と表示されています。無事ファイルシステムを作成できたようです。
ここまでくればLinuxでマウントしたり、実際にファイルを保存したりすることが可能です。
予約領域の削減【重要!忘れがち】
ここまでで終わりにしている方が多いのですが、実はもうひとつやっておくべきことがあります。それが予約領域の削減です。
予約領域とはディスクの容量が完全に満杯になってしまわないようにあらかじめ用意されている領域のことです。デフォルトではパーティションごとに5%が予約されるようになっています。例えば、今回交換した4TBのHDDであれば、200GBも使用できない領域が生じてしまうことになります。これでは、せっかく大容量のHDDを購入しても、容量をフルに使うことができません。そこで予約領域を削減して、自由に使用できる領域を多くすることにします。
予約領域はtune2fsコマンドで変更可能です。-rオプションとともに予約するブロック数を指定します。
admin@sv01:~ $sudo tune2fs -r 2621440 /dev/sdc1
tune2fs 1.42.9 (28-Dec-2013)
Setting reserved blocks count to 2621440
今回は予約領域を10GBに設定しました。
削減前のdfコマンドの結果です。削減前は空き容量が3.4TBしかありませんでしたが、tune2fsコマンドで予約領域を削減した後は3.6TBまで200GBも空き容量が増加しています。
# 削減前
/dev/sdc1 3.6T 89M 3.4T 1% /mnt/hdd01
# 削減後
/dev/sdc1 3.6T 89M 3.6T 1% /mnt/hdd01
予約領域の設定を忘れていると、せっかく大容量のHDDを導入しても、使える容量が小さいことになってしまいます。忘れがちな設定ですが、必ずやっておくことをおすすめします。
古いディスクからデータをコピーする
ここまでで、すでにディスクは使用可能な状態になっています。新しいディスクを使用できるようにすればOKという方はここで終了です。お疲れさまでした~(^_^)/~
ここからは今まで使用していたディスクからデータを移行する手順を紹介していきます。
まずはマウントします。
admin@sv01:~ $sudo mkdir /mnt/hdd01
admin@sv01:~ $sudo mount -t ext4 /dev/sdc1 /mnt/hdd01
ここでは/mnt/hdd01というマウントポイントを作成し、新しいディスク(パーティション)をマウントしています。/mnt/hdd01にファイルを保存すると、新しいディスクに保存されるようになります。
ファイルのコピーにはrsyncが便利です。rsyncでファイルをまるごとコピーします。
admin@sv01:/mnt/hdd01 $sudo rsync -avh /sambadata/* /mnt/hdd01
-avh
というオプションはファイルをそのままの状態でコピー(パーミッションやディレクトリを保持してコピー)し、進捗を表示するという意味です。本当は3つのオプションを組み合わせているのですが、そっくりそのままファイルをコピーしたいときに良く使うため、決まり文句として覚えておくと便利でしょう。
自分のやり方ですが、大量のファイルコピー時はコンソールをもう一つ開いて、dfコマンドをwatchするようにしています。rsyncの進捗と並べて表示させると、コピーの動作状況とコピー済みの容量が同時に把握でき、わかりやすいのでおすすめです。
$watch df -h
自分の場合は900GBのコピーで4時間ほどかかりました。小さいファイルが多い場合は、もっとかかるかもしれませんね。
自動でマウントするようにする
これも必要な方向けです。起動時にディスクが自動的にマウントされるようにします。
一般的にHDDの自動マウントには/etc/fstabを使用します。今までは教科書どおりfstabによる自動マウントを行っていましたが、HDDを取り外すとブートできなくなる問題があるため、今回の交換を機に他の方法でのマウントに切り替えたいと思います。起動時に自動実行されるバッチファイルを作成し、バッチからマウントするようにしたいと思います。
現在のfstabがこちら。
UUID=e138a963-720a-4922-8195-edbda61b89a8 / ext4 defaults 1 1
UUID=b13fe526-67fe-4590-a4a9-5678b9a09649 /home ext4 defaults 1 2
UUID=055c727b-c8fb-4957-a7a0-cf570e000620 swap swap defaults 0 0
UUID=248d74d9-e215-4f4d-8f37-f97ac0adaf74 /sambasnap ext4 defaults 0 0
UUID=33c969c3-53f9-4e10-bffa-b9115ff414f7 /sambadata ext4 defaults 0 0
ちなみにUUIDはこちらです。 /dev/sdc1 を/sambadataにマウントするようにします。
admin@sv01:~ $sudo blkid -o list
device fs_type label mount point UUID
--------------------------------------------------------------------------------
/dev/sda1 ext4 / e138a963-720a-4922-8195-edbda61b89a8
/dev/sda2 ext4 /home b13fe526-67fe-4590-a4a9-5678b9a09649
/dev/sda3 swap <swap> 055c727b-c8fb-4957-a7a0-cf570e000620
/dev/sda4 ext4 /sambasnap 248d74d9-e215-4f4d-8f37-f97ac0adaf74
/dev/sdb1 ext4 /sambadata 33c969c3-53f9-4e10-bffa-b9115ff414f7
/dev/sdc1 ext4 (not mounted) 10230133-1a99-40ea-9ada-f3e3893a8e1b
/etc/fstabの下2行がデータディスクとなります。この2つを削除します。
$sudo /etc/fstab
UUID=e138a963-720a-4922-8195-edbda61b89a8 / ext4 defaults 1 1
UUID=b13fe526-67fe-4590-a4a9-5678b9a09649 /home ext4 defaults 1 2
UUID=055c727b-c8fb-4957-a7a0-cf570e000620 swap swap defaults 0 0
・・・以下削除・・・
fstabから削除した代わりに、起動時にディスクをマウントするためのスクリプトを/etc/rc.d/rc.localに記載します。/etc/rc.d/rc/localは起動時に自動的に実行されるスクリプトファイルで、ここにマウントするコマンドを記載しておけば、起動時に自動的にマウントが実行されます。
admin@sv01:~ $vi /etc/rc.d/rc.local
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.
touch /var/lock/subsys/local
最下部にマウントするためのコマンドを記載します。
admin@sv01:~ $sudo vi /etc/rc.d/rc.local
・・・中略・・・
mount -t ext4 UUID="10230133-1a99-40ea-9ada-f3e3893a8e1b" /sambadata
変更を保存したら、実行権を付与します。
admin@sv01:~ $sudo chmod +x /etc/rc.d/rc.local
デフォルトでは実行権が付与されていないため、実行権を追加しないと実行されません。忘れずに実行権を付与しておきましょう。
まとめ
Linuxマシンのディスクを交換した後のセットアップについて紹介しました。
破壊的な操作が多くなるため、設定ミスによるデータ損失には十分注意するようにしてください。
コメント