2TB+2TBでNASを拡張する

 2012-01-09
自宅のlinux鯖に1TBの外付けHDDを接続してNASにしていたが、空き領域が200GBを切ってしまったので2TBのHDDでリプレースすることにする。

自分用メモメモ。
 

step1 ハードウェアの接続

DSC_0387.jpg
とりあえず新しい外付けHDDを購入してきました。2TBが安かったので二つ購入。FreecomのHard Drive Classic IIというもの。ヤマダ電機専用モデルらしい。あんまり耳慣れないメーカーだけど、どうも欧州では有名らしい。

DSC_0388.jpg
商品棚の値札では10,800円でしたが、値段を確認すると6,980円でした。

DSC_0389.jpg
接続する鯖機はベランダにあるので搭載しやすいように二つをまとめておく。この辺はてきとー。一応筐体の間は換気用に隙間を空けておく。(割り箸を挟んでいる)

DSC_0390.jpg
ベランダの鯖箱に吊す。てきとー。後ろには旧HDD(1TB)が見える。

step2 データ領域の準備

データストレージを柔軟に運用できるように、LVMを使用する。
ただし故障率が上昇してしまうので、別途バックアップを取っておく。

現在の状態

マウントポイント容量用途備考
/DATA1TBデータストレージ実HDDに直接パーティションを切って使用

目指す姿

マウントポイント容量用途備考
/DATA3TBデータストレージ新HDD(2TB)+旧HDD(1TB)
/DATA_backup2TBバックアップ用領域新HDD(2TB)
旧HDDは正直お払い箱でもよかったけど、折角LVM使うのでくっつけてみる。

ディスクの確認

購入したHDDはFreecom Hard Drive Classic II 2TBを二つ。メーカー保証が2年付いている。購入日は2012/01/08
両方ともWindowsで初期動作を確認し、データストレージ用のHDDはパーティションを削除した(←見分けのため→)。バックアップ用は購入時そのままのFAT32が書かれている。
% sudo fdisk -l /dev/sda

Disk /dev/sda: 40.0 GB, 40007761920 bytes
ヘッド 255, セクタ 63, シリンダ 4864, 合計 78140160 セクタ
Units = セクタ数 of 1 * 512 = 512 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスク識別子: 0x65cb39d7

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sda1   *        2048     1026047      512000   83  Linux
/dev/sda2         1026048    76001279    37487616   83  Linux
/dev/sda3        76001280    78139391     1069056   82  Linux スワップ / Solari

% sudo fdisk -l /dev/sdb

Disk /dev/sdb: 2000.4 GB, 2000398934016 bytes
ヘッド 238, セクタ 29, シリンダ 566072, 合計 3907029168 セクタ
Units = セクタ数 of 1 * 512 = 512 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスク識別子: 0x005a8391

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sdb1              63  3907022959  1953511448+   c  W95 FAT32 (LBA)

% sudo fdisk -l /dev/sdc

Disk /dev/sdc: 1000.2 GB, 1000204886016 bytes
ヘッド 78, セクタ 63, シリンダ 397542, 合計 1953525168 セクタ
Units = セクタ数 of 1 * 512 = 512 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスク識別子: 0xea798497

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sdc1            2048  1953525167   976761560   83  Linux

% sudo fdisk -l /dev/sdd

Disk /dev/sdd: 2000.4 GB, 2000398934016 bytes
ヘッド 255, セクタ 63, シリンダ 243201, 合計 3907029168 セクタ
Units = セクタ数 of 1 * 512 = 512 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスク識別子: 0x005a8391

デバイス ブート      始点        終点     ブロック   Id  システム

device file備考用途
sda内蔵HDD/boot , /
sdb外付けHDD(今回購入)backup用
sdc外付けHDD(既存)/DATA(既存)
sdd外付けHDD(今回購入)data用

step3 LVM領域の確保

LVMパーティションを作製

fdiskコマンドで8eのパーティションを一つ作る。
sudo fdisk /dev/sdd
コマンド (m でヘルプ): n
コマンドアクション
   e   拡張
   p   基本パーティション (1-4)
p
パーティション番号 (1-4, 初期値 1): 1
最初 セクタ (2048-3907029167, 初期値 2048): 
初期値 2048 を使います
Last セクタ, +セクタ数 or +size{K,M,G} (2048-3907029167, 初期値 3907029167): 
初期値 3907029167 を使います

コマンド (m でヘルプ): t
選択したパーティション 1
16進数コード (L コマンドでコードリスト表示): 8e
パーティションのシステムタイプを 1 から 8e (Linux LVM) に変更しました

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

Disk /dev/sdd: 2000.4 GB, 2000398934016 bytes
ヘッド 255, セクタ 63, シリンダ 243201, 合計 3907029168 セクタ
Units = セクタ数 of 1 * 512 = 512 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスク識別子: 0x005a8391

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sdd1            2048  3907029167  1953513560   8e  Linux LVM

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

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

PVを作製

pvcreateコマンドでPVの領域を確保する
[root]% pvcreate /dev/sdd1
  Physical volume "/dev/sdd1" successfully created

[root]% pvdisplay
  "/dev/sdd1" is a new physical volume of "1.82 TiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdd1
  VG Name               
  PV Size               1.82 TiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               TSGLKq-GtO8-hI3N-g0AW-ob0y-2P3b-gdEOB4

VGを作製

vgcreateコマンドでVGを作製する。PEサイズは512MBにしてみた。後にして思えば大きすぎたかも。まぁいい。
[root]% vgcreate -s 512M datavg /dev/sdd1
  Volume group "datavg" successfully created

[root]% vgdisplay
  --- Volume group ---
  VG Name               datavg
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               1.82 TiB
  PE Size               512.00 MiB
  Total PE              3726
  Alloc PE / Size       0 / 0   
  Free  PE / Size       3726 / 1.82 TiB
  VG UUID               wnzZ0M-EkQa-cQgq-cnOq-6PwG-2CaJ-E7FfUk

LVを作製

lvcreateコマンドでLVを作製する。現在のPE全てを割当て(-l 3726)したため、LV作成後にcgdisplayすると「Free PE / Size」がゼロになっている。
[root]% lvcreate -l 3726 -n datalv datavg
  Logical volume "datalv" created

[root]% lvdisplay
  --- Logical volume ---
  LV Name                /dev/datavg/datalv
  VG Name                datavg
  LV UUID                UmJ8Aw-4rFZ-1T4M-uxPt-bdbQ-TRvl-mfH7Cy
  LV Write Access        read/write
  LV Status              available
  # open                 0
  LV Size                1.82 TiB
  Current LE             3726
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

[root]% vgdisplay
  --- Volume group ---
  VG Name               datavg
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  2
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               1.82 TiB
  PE Size               512.00 MiB
  Total PE              3726
  Alloc PE / Size       3726 / 1.82 TiB
  Free  PE / Size       0 / 0
  VG UUID               wnzZ0M-EkQa-cQgq-cnOq-6PwG-2CaJ-E7FfUk

filesystemを作製

普通にフォーマットすればよい。devicefileは /dev/VG名/LV名 になっているハズ。
[root]% mkfs -t ext4 /dev/datavg/datalv
mke2fs 1.41.14 (22-Dec-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
122093568 inodes, 488374272 blocks
24418713 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=0
14904 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, 20480000, 23887872, 71663616, 78675968,
        102400000, 214990848

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

This filesystem will be automatically checked every 20 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

step4 データのコピー&バックアップscript

データのコピー

filesystemまで作製したら、適当なマウントポイントにマウントし、既存のデータを全てコピーします。
[root]% mount /dev/datavg/datalv /DATA_2
[root]% rsync -auv /DATA/samba_public/ /DATA_2/samba_public
600GB程度コピーするのに12時間以上かかりました。永い。。。ヘボいUSBコントローラなのだろうか。

コピーが完了したら、既存の/DATAをumountして、LVM領域をmountして運用開始。

バックアップscript

LVMは故障が怖い感じがするのでバックアップを取っておく。
RAIDにしなかったのは個人用途では単純なファイルコピーの方が全体として使いやすいと思ったから。
backup用の領域はあらかじめLVM領域として確保しておき、/DATA_backupでマウントしているとする。
#!/bin/zsh
DATA_DIR="/DATA/"
BACKUP_DIR="/DATA_backup/"
RSYNC="/usr/bin/rsync"

${RSYNC} -auv \
       --exclude='lost+found/' \
       --delete                \
       ${DATA_DIR} ${BACKUP_DIR} > ${BACKUP_DIR}/backup.log
上記のようなrsyncを実行するscriptを作製し、cronで毎晩実行するようにする。

step5 LVMextend

データをコピーし終わった旧HDDを遊ばせておくのも何なので、データストレージとして利用することにする。 バックアップ領域は2TBしかないので全体としては「使用できない」領域になってしまうが、折角LVMにしたので拡張の予行演習的なものをしてみたかった。

パーティション切り直し、PV作製までは上記と同じ。
[root]% vgextend datavg /dev/sdc1
  Volume group "datavg" successfully extended

[root]% vgdisplay
  --- Volume group ---
  VG Name               datavg
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               2.73 TiB
  PE Size               512.00 MiB
  Total PE              5589
  Alloc PE / Size       3726 / 1.82 TiB
  Free  PE / Size       1863 / 931.50 GiB
  VG UUID               wnzZ0M-EkQa-cQgq-cnOq-6PwG-2CaJ-E7FfUk

  --- Volume group ---
  VG Name               backupvg
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  2
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               1.82 TiB
  PE Size               512.00 MiB
  Total PE              3726
  Alloc PE / Size       3726 / 1.82 TiB
  Free  PE / Size       0 / 0
  VG UUID               P6vIyj-g1y2-JTeJ-tqOR-qXtF-Ynu2-wpUdlV
pvcreateしたあと、既存のvgをvgextendで拡張する。

[root]% lvextend -l +1863 /dev/datavg/datalv
  Extending logical volume datalv to 2.73 TiB
  Logical volume datalv successfully resized
既存のlvをlvextendで拡張する。-l +1863の数字は、上記vgdisplayのFree PE / Size 1863 / 931.50 GiBより。

[root]% resize2fs /dev/datavg/datalv
resize2fs 1.41.14 (22-Dec-2010)
Filesystem at /dev/datavg/datalv is mounted on /DATA; on-line resizing required
old desc_blocks = 117, new_desc_blocks = 175
Performing an on-line resize of /dev/datavg/datalv to 732561408 (4k) blocks.
The filesystem on /dev/datavg/datalv is now 732561408 blocks long.
resize2fsでファイルシステムを拡張する。

lvm_dataspace.png

以上、自分用メモ。
コメント












管理者にだけ表示を許可する
トラックバック
トラックバックURL:
http://wbbwbb.blog83.fc2.com/tb.php/62-0d20f1a3
≪ トップページへこのページの先頭へ  ≫