LVM:使用しているパーティションを拡張できますか?

LVM:使用しているパーティションを拡張できますか?

データベースデータを格納するディスクがあります。さて、ディスクがいっぱいになり、マシンに別のディスクを追加したいと思います。私はLVMを介してパーティションを追加して拡張できると聞きましたが、新しいディスクを追加して現在のディスク全体を(現在のデータを壊さずに)拡張できるかどうか疑問に思いました。

答え1

LVMは既存のパーティションのサイズを簡単に調整して移動できます。ただし、まずLVMパーティションでなければなりません。現在、パーティションはLVMにないため、手動で実行する必要があります。私の答えのすべてのコマンドはrootとして実行する必要があります。

新しいディスクの準備

  1. Linuxで使用するGPTまたはMBRパーティションを作成します。他のオペレーティングシステムと共有したい場合を除き、ディスク全体を使用してください。このパーティションをと呼びます/dev/sdb1
  2. /dev/sdb1LVMの作成物理ボリューム、これはディスクのこの部分がLVMで使用されることを宣言します。

    pvcreate /dev/sdb1
    
  3. LVMの作成ボリュームグループ物理ボリュームを含みます。すべてのLVMボリュームはボリュームグループの一部です。たとえば、ボリュームグループの名前を選択しますalex_os

    vgcreate alex_os /dev/sdb1
    
  4. これで、LVMが使用するスペースができました。保存したいデータを収容するのに十分な大きさのLVM論理ボリュームを作成します。必要に応じて(他のファイルシステム用のスペースを確保したり、スワップスペースを必要としない限り)スペースをすべて使用したりできますが、ファイルシステムを拡張するよりも縮小するのは難しいため、必要と思われるスペースのみを使用するのが最善です。ファイルシステム中期的に安全マージンを追加してください。rootルートファイルシステムなどの論理ボリュームの名前を選択するか、dbここにデータベースを保存する場合を選択します。

    lvcreate -L 40g -n root alex_os
    

次の作業は、オペレーティングシステムのパーティションを新しいディスクに移動するのか、新しいディスクを追加のストレージとして使用するのかによって異なります。

追加ストレージに新しいディスクを使用する

  1. 新しいディスクにファイルシステムを作成します。

    mkfs.ext4 /dev/mapper/alex_os-root
    
  2. 使用する新しいファイルシステムを登録します。取り付けポイントを選択します。これは既存のディレクトリでも新しいディレクトリでもかまいません。

    • 新しいディスクに移動するには、/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/fstab2番目の列に含まれる行の後に次の行を追加します。/

      /dev/mapper/alex_os-db /var/lib/mysql ext4 errors=remount,ro 0 2
      
    • 新しいディスクを特定のサービスにバインドしたくない場合は、別の場所にマウントしてください。たとえば、/etc/fstab2番目の列に含まれる行の後に次の行を追加します。/

      /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
      

システムを新しいディスクに転送

  1. メディアを保存するには、再起動してください(例:システム回復ディスク)データを新しいディスクにコピーします。一貫したスナップショットを取得できないため、実行中のシステムからコピーできません。データをコピーするには、次の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
      
  2. 新しいディスクを起動可能にします。これを行う正確な方法はディストリビューションによって異なります。通常、ブートローダをインストールしてinitramfsを再構築する必要があります。たとえば、Ubuntuでは通常、次のようなものが必要です。

    chroot /media/alex_os-root
    update-initramfs
    update-grub
    grub-install /dev/sdb
    

1パーティションのファイルシステムのサイズを変更することは別の問題です。ほとんどの最新のファイルシステムはオンライン拡張をサポートしていますが、オンライン縮小はサポートしていません。
²技術的に言えば可能cp -aシステムがアイドル状態の場合は幸運かもしれませんが、これは追跡が困難なレイテンシエラーを引き起こす可能性があります。 LVMの利点の1つは、これを使用して一貫したスナップショットを撮ることができることです。一部のファイルシステム(zfs、btrfs)には独自のスナップショット機能がありますが、ext4にはありません。

関連情報