データベースデータを格納するディスクがあります。さて、ディスクがいっぱいになり、マシンに別のディスクを追加したいと思います。私はLVMを介してパーティションを追加して拡張できると聞きましたが、新しいディスクを追加して現在のディスク全体を(現在のデータを壊さずに)拡張できるかどうか疑問に思いました。
答え1
LVMは既存のパーティションのサイズを簡単に調整して移動できます。ただし、まずLVMパーティションでなければなりません。現在、パーティションはLVMにないため、手動で実行する必要があります。私の答えのすべてのコマンドはrootとして実行する必要があります。
新しいディスクの準備
- Linuxで使用するGPTまたはMBRパーティションを作成します。他のオペレーティングシステムと共有したい場合を除き、ディスク全体を使用してください。このパーティションをと呼びます
/dev/sdb1
。 /dev/sdb1
LVMの作成物理ボリューム、これはディスクのこの部分がLVMで使用されることを宣言します。pvcreate /dev/sdb1
LVMの作成ボリュームグループ物理ボリュームを含みます。すべてのLVMボリュームはボリュームグループの一部です。たとえば、ボリュームグループの名前を選択します
alex_os
。vgcreate alex_os /dev/sdb1
これで、LVMが使用するスペースができました。保存したいデータを収容するのに十分な大きさのLVM論理ボリュームを作成します。必要に応じて(他のファイルシステム用のスペースを確保したり、スワップスペースを必要としない限り)スペースをすべて使用したりできますが、ファイルシステムを拡張するよりも縮小するのは難しいため、必要と思われるスペースのみを使用するのが最善です。ファイルシステム中期的に安全マージンを追加してください。
root
ルートファイルシステムなどの論理ボリュームの名前を選択するか、db
ここにデータベースを保存する場合を選択します。lvcreate -L 40g -n root alex_os
次の作業は、オペレーティングシステムのパーティションを新しいディスクに移動するのか、新しいディスクを追加のストレージとして使用するのかによって異なります。
追加ストレージに新しいディスクを使用する
新しいディスクにファイルシステムを作成します。
mkfs.ext4 /dev/mapper/alex_os-root
使用する新しいファイルシステムを登録します。取り付けポイントを選択します。これは既存のディレクトリでも新しいディレクトリでもかまいません。
新しいディスクに移動するには、
/var/lib/mysql
そのディスクをマウントポイントとして使用してください。まず、新しいファイルシステムを一時的な場所にマウントしてデータを移動します(これを行うときにファイルが使用されていないことを確認してください。)service mysql stop mount /dev/mapper/alex_os-db /mnt mv /var/lib/mysql/* /mnt mount --move /mnt /var/lib/mysql service mysql start
最後に、ファイルを編集し、
/etc/fstab
2番目の列に含まれる行の後に次の行を追加します。/
/dev/mapper/alex_os-db /var/lib/mysql ext4 errors=remount,ro 0 2
新しいディスクを特定のサービスにバインドしたくない場合は、別の場所にマウントしてください。たとえば、
/etc/fstab
2番目の列に含まれる行の後に次の行を追加します。/
/dev/mapper/alex_os-db /media/data ext4 errors=remount,ro 0 2
その後、マウントポイントを作成し、ファイルシステムをマウントします。
mkdir /media/data mount /media/data
これで、そこに入れて使用するデータを移動できます。シンボリックリンクサービスで予想されるファイルの場所。ファイルの移動中にファイルにアクセスするすべてのサービスを停止します。たとえば、コンテンツを
/var/lib/mysql
新しいディスクに移動するには、次のようにします。service mysql stop mv /var/lib/mysql /media/data/ ln -s /media/data/mysql /var/lib/mysql service mysql start
システムを新しいディスクに転送
メディアを保存するには、再起動してください(例:システム回復ディスク)データを新しいディスクにコピーします。一貫したスナップショットを取得できないため、実行中のシステムからコピーできません。データをコピーするには、次の2つの可能性があります。
ファイルシステムを作成し、ext4ファイルシステムなどのファイルをコピーします。
mkfs.ext4 /dev/mapper/alex_os-root mount /dev/mapper/alex_os-root /media/alex_os-root cp -a /media/sda1 /media/alex_os-root
ファイルシステムイメージをコピーして展開して塗りつぶします(例:ext4ファイルシステムの場合)。
cat /dev/sda1 >/dev/mapper/alex_os-root resize2fs /dev/mapper/alex_os-root
新しいディスクを起動可能にします。これを行う正確な方法はディストリビューションによって異なります。通常、ブートローダをインストールしてinitramfsを再構築する必要があります。たとえば、Ubuntuでは通常、次のようなものが必要です。
chroot /media/alex_os-root update-initramfs update-grub grub-install /dev/sdb
1パーティションのファイルシステムのサイズを変更することは別の問題です。ほとんどの最新のファイルシステムはオンライン拡張をサポートしていますが、オンライン縮小はサポートしていません。
²技術的に言えば可能cp -a
システムがアイドル状態の場合は幸運かもしれませんが、これは追跡が困難なレイテンシエラーを引き起こす可能性があります。 LVMの利点の1つは、これを使用して一貫したスナップショットを撮ることができることです。一部のファイルシステム(zfs、btrfs)には独自のスナップショット機能がありますが、ext4にはありません。