web-dev-qa-db-ja.com

LVMの単一の物理ボリュームにある2つの論理ボリュームを組み合わせるにはどうすればよいですか?

2つの論理ボリュームがあり、一方は/としてマウントされ、もう一方は/ homeとしてマウントされます。

/ボリュームが常に不足しています。 (はい、そのスペースを何が使用しているかはわかっています。いいえ、それを削除することはできません。)

私はそれをするために一日か二日の間機械を降ろして喜んでです。

OS:Linux xxxxx 2.6.32-279.22.1.el6.x86_64 #1 SMP Wed Feb 6 03:10:46 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux(CentOS)

14
Nick ODell

完了し、再パーティション化が機能しました。ただし、両方のガイドに不足している領域があるため、私が行ったことを要約します。ユーザー名をzzzzに、コンピュータの名前をxxxxxxxに置き換えたことに注意してください。また、特に明記されていない限り、すべてのコマンドはrootとして実行する必要があります。

まず、バックアップしました:

tar -zcvf /media/e14be279-8c11-450a-b52c-1493cff3c632/xxxxxxx-home.tar.gz --exclude=/home/zzzz/Downloads /home

これにより、/ homeディレクトリの圧縮されたバックアップが作成され、外部ドライブに配置されます。 (外付けドライブのパスは異なります。)

次に、シングルユーザーモードで再起動する必要があります。

reboot

コンピュータの電源が再び入ったら、次のような画面を探す必要があります。

Booting Centos 2.6.32-279.22.1.el6.x86_64 in 3 seconds...

任意のキーを押して中断します。次のような画面が表示されます。

grub boot centos 押す a、次にスペース、次にsingleと入力します。 Enterキーを押します。

次のようなプロンプトが表示されます。

 [root@xxxxxxx /] # 

次のコマンドを入力します。

df -h

SizeUsed、およびAvailが表示されます。 Usedに興味があります。
ホームボリュームが使用しているスペースの量を書き留めます。後で必要になります。

umount /home
e2fsck -f /dev/mapper/vg_xxxxxxx-lv_home

ホームボリュームが使用したスペースを覚えていますか?それを2倍にして、このコマンドに渡します。たとえば、ホームディレクトリで15ギガバイトを使用していたため、サイズを30ギガバイトに設定しました。

resize2fs /dev/mapper/vg_xxxxxxx-lv_home 30G

警告:この次のステップは、データを失う可能性があるステップです。 sureを前のコマンドよりも大きいサイズに設定します。確かに5ギガバイトを追加します。

lvresize -L 35G vg_xxxxxxx/lv_home

ルートパーティションに、解放したスペースをすべて使用するように伝えます。

lvresize -l +100%FREE vg_xxxxxxx/lv_root
resize2fs /dev/mapper/vg_xxxxxxx-lv_root

データをルートパーティションにコピーする

mount -t ext4 /dev/mapper/vg_xxxxxxx-lv_home /mnt/home
ls /mnt/home
cp -a /mnt/home/. /home/

(ちなみに、その-aは重要です。そうしないと、すべてがrootによって所有され、あなたはそれを望まないからです。
データが正しくコピーされたことを簡単に確認します。

ls -lR /home

次に、ホームパーティションを削除し、rootに新しいスペースを再度取得するように指示します。

umount /mnt/home
lvremove /dev/mapper/vg_xxxxxxx-lv_home
lvresize -l +100%FREE vg_xxxxxxx/lv_root
resize2fs /dev/mapper/vg_xxxxxxx-lv_root

この時点で、私はあなたが学ぶことができる大きな間違いを犯しました。再起動し、システムが復旧したとき、/ homeパーティションをマウントできなかったため、ルートパーティションを読み書き可能としてマウントすることを拒否しました。したがって、再起動する前に、次のように入力します

nano /etc/fstab

これらの行の1つは、システムに/ homeパーティションをマウントするように指示します。 # その前に。 Ctrl-O、Enter、Ctrl-Xを押します。 Now再起動できます。

(仮に、私と同じようにfstabを編集するのを忘れた場合、ルートパーティションをマウントするコマンドはmount -n -o remount -t ext2 /dev/vg_xxxxxxxx/lv_root /

10
Nick ODell

外部ストレージなしで/から実行できますが、/homeをアンマウントする必要があります。

注意してこれを行うことは特に危険な手順ではありませんが、それでも標準的なアドバイスが適用されます。最初にバックアップを作成し、それらをテストします。

ボリュームグループ名にはfooを使用し、論理ボリューム名にはroothomeを使用します。これにより、論理ボリュームパスがfoo/rootおよびfoo/homeになり、デバイスパスが/dev/mapper/foo-rootおよび/dev/mapper/foo-homeになります。私はそれらが同じボリュームグループにあると想定しています。そうでない場合、これはより複雑になり、2つのボリュームグループの物理ボリュームレイアウトに依存します。

まず、/homeをアンマウントしてe2fsck -f /dev/mapper/foo-homeを実行します。次に、最初にファイルシステムを縮小し、それに応じて論理ボリュームを縮小します。 resize2fs /dev/mapper/foo-home NNNNを実行します。NNNNは、ボリューム内に保持するブロックの数です(代わりにKMまたはG)。ファイルシステムを圧縮した後、論理ボリュームをlvresize -L MMMM foo/homeで圧縮します。MMMMはメガバイト数です(デフォルトの単位はresize2fsとは異なりますが、同じサフィックスKを使用できます) 、MG)。ファイルシステムよりも論理ボリュームを縮小しないように非常に注意してください。これは、この手順の1つの危険なステップです。

ボリュームグループに未使用の部屋があります。 lvresize -l +100%FREE foo/rootを実行して、ルートボリュームがボリュームグループ内のすべての空き領域を取得するようにします。次に、resize2fs /dev/mapper/foo-root(サイズパラメータなし)を実行して、ファイルシステムを拡大し、論理ボリューム全体に広げます。ボリュームがマウントされているときに拡大できます。

これで、いくつかのファイルをコピーする余地ができました。すべてに十分なスペースがない場合は、できるだけ移動してから手順を繰り返します。

/homeからすべてのファイルをコピーしたら、それを破棄する準備が整います。 /homeが空であること(ファイルを移動した場合)、または/home内のすべてのファイルが/rootにコピーされていること(ファイルをコピーした場合)を確認します。不要になった論理ボリュームを破棄するには、lvremove foo/homeを実行します。最後に、ルートボリュームをlvresize -l 0%FREE foo/rootで、ファイルシステムをresize2fs /dev/mapper/foo-homeで拡大します。

警告:何かを行う前にすべての重要なデータをバックアップしてください!

すべてのデータを/ homeパーティションから別のパーティション、ローカルパーティション、外部ドライブ、または十分なスペースがある他の場所に移動する必要があります。

/ home lvを削除してから、/(root)lvを展開します

データを/ homeディレクトリにコピーします。

編集1

上記の答えは、ルートパーティションにホームパーティションにデータを配置するための十分なスペースがないことを前提としています。

そうでない場合は、ホームパーティションを別の場所にマウントし、データをコピーします。次に例を示します。

umount /home
mount /dev/mapper/lv-home /mnt/home
cp -a /mnt/home/. /home/

次に、ホームパーティションを削除し、ルートパーティションを展開します

3
ghm1014

OK、私はまったく同じ立場にいます。 CentOSはデフォルトで小さなルートボリュームを作成し、スペースの残りを/homeで埋めているようです。私は最初にVM=でセットアップをテストしましたが、小さいディスクではCentOSはホームボリュームを作成しませんでした。スペースの制約になる前にこの問題に気付き、どのようにしないかを考えました。シングルユーザーモードに入る必要があります。

マシンへのアクセスを取得します。sshは問題ありません(非rootユーザーを想定)。

  1. cd /なので、ホームディレクトリにいません
  2. Sudo -s私たちはこのすべてのルートになります
  3. lsof /home誰もホームボリュームを使用していないことを確認してください。
  4. mvtar、または類似した他の場所への家のコンテンツ
  5. lvremove centos/home
  6. /etc/fstabを編集してコメントアウトするか、/homeの行を削除します
  7. 前にバックアップした家の内容を/homeに移動します-これで安全な位置になりました。ここで再起動しても問題ありません。
  8. lvresize -l +100%FREE centos/root
  9. xfs_growfs /dev/centos/root CentOS 7では、他の人がresize2fsを使用する可能性があります
  10. df -h成功しましたか?

これが誰かにとって簡単になることを願っています。最近、ファイルシステムでライブでできることは本当に驚くべきことです。

2
Damon Maria