ディスク交換
ここでは、20GBの元ディスクを40GBの交換用ディスクへ入れ替えてみます。
電源断状態で、追加ディスクを取り付ける
まずは、電源断します。
$ poweroff
...
|
poweroffコマンドは、shutdown -h now
とほぼ同じ動作をします。
shutdownコマンドに慣れている方は、そちらでもOKです。
電源断したら、交換する新しいディスクを取り付けます。
ただし、古いディスクから新しいディスクへ中身をコピーするまで、古いディスクも装着したままとします。
レスキューモード(リカバリモード)で起動する
新しいディスクの取り付けを終えたら、電源投入ですが、ここでは、レスキューモード(リカバリモード)で起動します。
ディスクの入れ替え等々ストレージのメンテナンスは、通常のシステム状態で行うことはありません。
一般的に、シングル(ユーザ)モードやレスキューモード(リカバリモード)などで作業を行うことが求められます。
ここでは、万全を期すためにも
レスキューモード ( Debian or Ubuntu では、リカバリーモード ) で作業を行うこととします。
CentOS ScientificLinux
CD/DVDドライブに インストールディスクを挿入し、システム再起動します。
CentOS 7 では、以下のような画面が表示されます。
Trouble Shooting を選択します。
Rescue a CentOS System を選択し、レスキューモードへ切り替えます。
上記のように環境設定を行うか確認メッセージが表示されます。
今回は、ディスクの変更だけですので、特別な環境設定は必要ありませんので、ここではSkipで良いでしょう。
上記のように レスキューモード のプロンプトが表示されますので、あとは、コマンドにてパーティションの変更を行います。
Debian Ubuntu
電源投入と同時に(GRUB2の場合)Shiftキーを押下します。
Ubuntu 14(LinuxMint) では、以下のような画面が表示されます。
BIOSによっては、Shiftキーに特別な意味があったり、起動のタイミングが短すぎる場合など、うまく GRUBのメニューが表示されないことがあります。
その場合は、GRUB 起動時のタイミングを少し伸ばしてやるとうまくいくでしょう。
$ vi /etc/default/grub
...
GRUB_HIDDEN_TIMEOUT=10
...
GRUB_TIMEOUT=10
...
|
変更したら、grub の設定を更新します。
$ update-grub
...
|
これで再起動した際に、BIOSの起動画面からOS起動までに10秒のタイムラグがありますから、(ほとんどは真っ暗な画面)そこで Shiftキーを押下すれば、GRUBのメニューが表示されるでしょう。
ディストリビューション名 — recoverry mode を選択します。
起動の後、上記のようにリカバリーメニューが表示されます。
root Drop to root shell prompt を選択し、リカバリーモードのシェルを起動します。
上記のように Give root password …(…): とパスワードを聞かれるので、root(管理者)のパスワードを入力します。
上記のように リカバリーモード のプロンプトが表示されますので、あとは、コマンドにて各作業を行います。
Debian or
Ubuntu のリカバリモードで作業を行う場合、
リカバリモードのデフォルトでは、
ファイルが読み取り専用となっていることに注意してください。
そのため、ファイルシステムの拡張などの実行時にエラーが発生する場合があります。
それらの作業を行う前に、
読み書き可で再マウントしておきましょう。
$ mount -o remount,rw /
|
(参考)レスキューモード(リカバリモード)とともによく利用されるのが、シングルユーザモードです。
シングルユーザモードへの切り替えは、以下のコマンドで実行することができます。
遠隔操作では不可で、端末から直接、テキストモードでログインし、以下のように入力すればシングルユーザモードに切り替わります。(参考まで)
$ init 1; exit
: (rootパスワードを入力)
|
新しいディスクが認識できているか確認する
コマンドにて、新しく取り付けたディスクが認識できているか確認します。
$ dmesg|grep sd
[ 1.645723] sd 2:0:0:0: [sda] 41943040 512-byte logical blocks: (21.4 GB/20.0 GiB)
...
[ 1.647064] sd 3:0:0:0: [sdb] 83886080 512-byte logical blocks: (42.8 GB/40.0 GiB)
...
$ parted -l
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sda: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 1050MB 1049MB primary ext4 boot
2 1050MB 21.5GB 20.4GB primary lvm
Model: Linux device-mapper (linear) (dm)
Disk /dev/mapper/centos00-root: 18.3GB
Sector size (logical/physical): 512B/512B
Partition Table: loop
Disk Flags:
Number Start End Size File system Flags
1 0.00B 18.3GB 18.3GB ext4
Model: Linux device-mapper (linear) (dm)
Disk /dev/mapper/centos00-swap: 2147MB
Sector size (logical/physical): 512B/512B
Partition Table: loop
Disk Flags:
Number Start End Size File system Flags
1 0.00B 2147MB 2147MB linux-swap(v1)
Error: /dev/sdb: unrecognised disk label
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdc: 42.9GB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:
|
上記の出力例では、/dev/sdb が新しく追加されたディスクとなります。
新しく交換するディスクが、まっさらのハードディスクであれば、/dev/sdb には、上記のようにパーティションがないはずです。
古いディスクをそのまま新しいディスクへコピーする
dd コマンドを使って、ディスクコピーします。
$ dd if=/dev/sda of=/dev/sdb bs=256M
80+0 records in
80+0 records out
21474836480 bytes (21 GB) copied, 182.5555 s, 118 MB/s
|
dd コマンドは、パラメータに bs (1度にコピーするブロックサイズ) を指定しないと、かなり、時間がかかります。
ここでは、256M (256MB) を指定しています。
電源断状態で、古いディスクを取り外す
まずは、電源断します。
$ poweroff
...
|
電源断したら、古いディスクを取り外します。
また、先に接続した新しいディスクのSATA接続先を取り外した古いディスクのそれに差し替えます。
作業を終えたら、電源投入します。
$ dmesg|grep sd
[ 1.645723] sd 2:0:0:0: [sda] 83886080 512-byte logical blocks: (42.8 GB/40.0 GiB)
...
$ parted -l
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdc: 42.9GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 1050MB 1049MB primary ext4 boot
2 1050MB 21.5GB 20.4GB primary lvm
Model: Linux device-mapper (linear) (dm)
Disk /dev/mapper/centos00-root: 18.3GB
Sector size (logical/physical): 512B/512B
Partition Table: loop
Disk Flags:
Number Start End Size File system Flags
1 0.00B 18.3GB 18.3GB ext4
Model: Linux device-mapper (linear) (dm)
Disk /dev/mapper/centos00-swap: 2147MB
Sector size (logical/physical): 512B/512B
Partition Table: loop
Disk Flags:
Number Start End Size File system Flags
1 0.00B 2147MB 2147MB linux-swap(v1)
$ df -H
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos00-root 18G 851M 17G 5% /
devtmpfs 516M 0 516M 0% /dev
tmpfs 522M 0 522M 0% /dev/shm
tmpfs 522M 6.9M 515M 2% /run
tmpfs 522M 0 522M 0% /sys/fs/cgroup
/dev/sda1 1.1G 76M 871M 8% /boot
|
上記のように、ディスク容量の合計は、20GBのままとなっています。
ただ、実際のディスク容量は、40GB(厳密には42.9GB) なのは、上記の出力結果からわかります。
次は、ディスクの余っている分をルートディレクトリとして増量します。
パーティションを2TiB以上の大容量にしたい場合は、
パーティションテーブルがGPTでないと作成(拡張)できないため、
ここで、
2TiB超えパーティションのためのMBR(msdos)からGPTへの移行 を参照の上、GPTへ移行した上で以降の作業を行ってください。
もちろん、現パーティションテーブルが既にGPTの場合は、そのまま以降の作業でOKです。
パーティションテーブルの確認は、partedコマンドで確認することができます。
$ parted -l
...
Partition Table: msdos
...
$ parted -l
...
Partition Table: gpt
...
|
ディスク容量を変更(増量)
先の手順にて、20GBのHDDを40GBの新HDDへ交換しました。
ただ、このままでは、20GB増量となった新HDDをフル活用できていないので、
余っている 20GB を既存のルートディレクトリの容量に追加増量してみます。
レスキューモード(リカバリモード)で起動する
一旦、現行パーティションを削除し、容量変更しますので、何かあった場合に、ディスク情報が読めなくなってしまうと大変です。
ここは、レスキューモード(リカバリモード)で変更します。
具体的な レスキューモード(リカバリモード)の起動方法は、 先の “レスキューモード(リカバリモード)で起動する” を参照してください。
parted を使って パーティションを拡張する
PV を拡張する
LVMを使っていますので、続けて PV, LV の拡張を行います。
レスキューモード(リカバリーモード)で、PVのサイズを変更します。
LVMでは、
PV(Physical Volume) 物理ボリューム と LV (Logical Volume) 論理ボリューム という2つのボリュームを持ちます。
LVMは、物理的に複数のボリュームを1つの論理ボリュームとして扱うことができます。
つまり、ここでいう 複数のPV を 1つのLV に割り当てることができるということです。
$ pvdisplay
--- Physical volume ---
PV Name /dev/sda2
VG Name centos00
PV Size 19.02 GiB / not usable 3.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 4869
Free PE 0
Allocated PE 4869
PV UUID xe2XmG-0B9i-fGjg-8hq1-qm1S-4Z2w-7eaAp4
$ pvresize /dev/sda2
Physical volume "/dev/sda2" changed
1 physical volume(s) resized / 0 physical volume(s) not resized
$ pvdisplay
--- Physical volume ---
PV Name /dev/sda2
VG Name centos00
PV Size 39.02 GiB / not usable 2.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 10114
Free PE 5120
Allocated PE 4869
PV UUID xe2XmG-0B9i-fGjg-8hq1-qm1S-4Z2w-7eaAp4
|
LV を拡張する
ファイルシステム を拡張する
レスキューモード(リカバリーモード)で、ファイルシステムのサイズを変更します。
ファイルシステムのチェックを行います。
$ e2fsck -f /dev/centos00/root
e2fsck 1.42.9 (28-Dec-2013)
...
|
もし、チェックで異常などが検出された場合は、以下のように出力されるかもしれません。
$ e2fsck -f /dev/centos00/root
e2fsck 1.42.9 (28-Dec-2013)
...
Free blocks count wrong (4000963, counted=4000911)
Fix<y>? yes
Free blocks count wrong (1063899, counted=1063896)
Fix<y>? yes
/dev/centos00/root: ***** FILE SYSTEM WAS MIDIFIED *****
/dev/centos00/root: 25640/1089536 files (0.2% non-contiguous), 351089/4352000 blocks
|
上記の例では、”修復しますか?” と聞かれますので、
yesと入力し、ファイルシステムのチェックを完了してください。
異常の内容によってメッセージも異なりますで、確認の上、指示に従って作業を行ってください。
xfsの場合は、xfs_repair コマンドで、ファイルシステムのチェックおよび修復を行います。
ファイルシステム を 拡張します。
$ resize2fs /dev/centos00/root
...
|
xfsの場合は、xfs_growfs コマンドで、ファイルシステムの拡張を行います。
最後に、システム再起動します。
(CD/DVDドライブの インストールディスクなどを装着している場合は、それらを取り出した上で再起動します。)
$ reboot
|
最後に容量を確認
システム再起動後、正しくディスクの交換および容量変更ができたか確認してみましょう。
$ df -H
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos00-root 39G 925M 37G 3% /
devtmpfs 516M 0 516M 0% /dev
tmpfs 522M 0 522M 0% /dev/shm
tmpfs 522M 6.9M 515M 2% /run
tmpfs 522M 0 522M 0% /sys/fs/cgroup
/dev/sda1 1.1G 76M 871M 8% /boot
$ free
total used free shared buffers cached
Mem: 1018256 184348 833908 6672 7564 67120
-/+ buffers/cache: 109664 908592
Swap: 2097148 0 2097148
|
ルートディレクトリ( /dev/mapper/centos00-root ) の容量がアップし、
スワップ領域( Swap total )が LVのスワップ領域のサイズと同じであればOKです。
(おまけ)ディスクシステムを確認する方法
ディスクシステムを確認する方法について、ちょっとだけ解説しておきます。
確実にディスクシステムを確認するには、/etc/fstab をダンプするのが、一番、間違いないかと思います。
$ cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Thu Jan 8 05:31:47 2015
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 1 1
UUID=b4868c6b-a478-46b5-8262-c5f418c1c132 /boot xfs defaults 1 2
/dev/mapper/centos-swap swap swap defaults 0 0
|
/etc/fstab は、あくまで ディスクなどをどのようにファイルシステムにマウントするかを記述するためのファイルですから、
マウントしないものは、記述されていません。
マウントしていないファイルシステムを確認するのは、parted コマンドを使うと確認することができます。
$ parted -l
モデル: ATA VBOX HARDDISK (scsi)
ディスク /dev/sda: 42.9GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos
ディスクフラグ:
番号 開始 終了 サイズ タイプ ファイルシステム フラグ
1 1049kB 525MB 524MB primary xfs boot
2 525MB 42.9GB 42.4GB primary lvm
モデル: Linux device-mapper (linear) (dm)
ディスク /dev/mapper/centos-root: 40.3GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: loop
ディスクフラグ:
番号 開始 終了 サイズ ファイルシステム フラグ
1 0.00B 40.3GB 40.3GB xfs
モデル: Linux device-mapper (linear) (dm)
ディスク /dev/mapper/centos-swap: 2147MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: loop
ディスクフラグ:
番号 開始 終了 サイズ ファイルシステム フラグ
1 0.00B 2147MB 2147MB linux-swap(v1)
|
いかがだったでしょうか?
ディスクの交換手順をまとめてみた(通常パーティション&fdiskによるパーティション拡張編) の手順と全く同じです。パーティションの操作コマンドが、fdisk から parted コマンドに変わっただけです。
2TiB以上の大容量のパーティション操作を行う場合は、パーティションテーブルを
GPTへ移行すれば、この記事のように parted コマンド で操作を行うことが可能です。
先に書きましたが、大容量ディスクが安価で手に入る時代では、partedコマンドを使えないと、無いかと不便です。
概ね fdiskの操作方法と同じなので、それほど難しくはありませんので、是非、トライしてみられてはいかがと思います。
2015年10月23日, 3:32 PM
貴重な情報有難うございます。
Debian8amd64なんですが、/ を一つのパーティションext4にしました。
この場合、4GBだけルートから分割してスワップ領域にするには、
どうすればよいでしょうか。
2015年10月24日, 5:00 AM
治部さん
コメントありがとうございます、管理人です。
さて、ご質問の件ですが、
ネットで検索されるとわかるかと思いますが、
パーティションとファイルシステムを (小さく)resize すれば良い?
という感じですが、おすすめしません。
一旦、作成してしまったパーティションを、大きくする場合の resize は、ほとんど問題ないですが、小さくしたい場合は非常にリスクが高いです。
確か、ext3まではできていたように思いますが、ext4 でできるのか不明です。個人的も、試したことがありません。
上級者の方は、自己責任にてやられる分には、全然問題ないと思いますが、もし失敗した時に、取返しがつかないことがありますから、おすすめしません。
では、どうするか?ですが、
交換前のディスクへ一旦戻して、再度、交換手順を行われてはいかがでしょうか?
また、ディスク容量が同じ場合は、容量の小さいディスク交換手順 http://server-setting.info/ubuntu/change-disk-ssd.html を参照してみてください。