LVMの単一の物理ボリュームに存在する2つの論理ボリュームを結合するにはどうすればよいですか?


14

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

/ボリュームの容量が絶えず不足しているため、これらを組み合わせたいと思います。(はい、私はそのすべてのスペースを使用しているものを知っています;いいえ、それを削除することはできません。)

マシンを1〜2日間ダウンさせて実行します。

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)


1
/ボリュームを増やすだけではなく、それがLVMを使用するポイントではないのはなぜですか?
jasonwryan

2
@jasonwryanディスク領域の割り当て方法を手動で調整する必要があるのはなぜですか?それがファイルシステムの要点ではありませんか?
ニックODell

@NickODellいいえ。1つのボリュームが小さすぎてデータを保持できない場合、そのボリュームは小さすぎます。全体的な容量は、ファイルシステムのサイズではなく、ボリュームのサイズの要因です。ただし、論理ボリュームを使用すると、マウントされたボリュームのサイズを変更したり、異種のストレージリソースを単一のボリュームにマージしたりするのが簡単になります。LVMを使用すると、リブートすらせずにjasonwryanが提案することを実行できるはずです。通常のユーザーがログオフする(/ homeを解放する)ことを確認してくださいumount / home lvreduce(忘れないでください-r)ルートファイルシステムでこれで完了です。マージする場合は、rsyncを実行する必要があります。
ブラチリー

@JoelDavisすべてのユーザーがログアウトする必要がある場合、再起動する必要があるかどうかは関係がありますか?
ニックODell

@NickODellうーん...はい?ほとんどのLinuxシステムはサーバーであるため、特に断りのない限り、それは人々の想定であることに注意してください。
-Bratchley

回答:


9

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

最初に、バックアップしました:

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...

中断するには、任意のキーを押してください。次のような画面が表示されます。

グラブブートチェントス を押しa、次にスペースを押し、を入力しsingleます。Enterキーを押します。

次のようなプロンプトが表示されるはずです。

 [root@xxxxxxx /] # 

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

df -h

それはあなたを示さなければならないSizeUsedAvail。興味がありUsedます。
ホームボリュームが使用している容量を書き留めます。後で必要になります。

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

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

resize2fs /dev/mapper/vg_xxxxxxx-lv_home 30G

警告:この次のステップは、データを失う可能性のあるステップです。確認してくださいあなたは前のコマンドよりも大きなサイズに入れていること。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

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

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を押します。これで再起動できます。

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


詳細が大好き!
nmr

同様の問題に遭遇しましたが、マシンに物理的にアクセスできません。シングルユーザーモードで起動する必要のないこれを行う方法はありますか?
FrustratedWithFormsDesigner

@FrustratedWithFormsDesigner理論的には、はい。sshアクセスがある場合は、をバックアップできます/home。その後、アンマウントできる限り、/home削除できます。しかし、私はそのプロセスを実際に話す資格はありません。これは、新しい質問をする必要があるものです。
ニックODell

1
@NickODell:私はなかった新しい質問尋ねる:askubuntu.com/questions/1115913/...
FrustratedWithFormsDesigner

@FrustratedWithFormsDesignerそれは私があなたに与えたよりもはるかに良いアドバイスです。
ニックODell

3

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

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

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

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

編集1

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

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

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

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


3

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

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

私が使用しますfooボリュームグループ名のために、とroothome論理ボリューム名など。これにより、論理ボリュームパスfoo/rootfoo/homeが作成され、デバイスパス/dev/mapper/foo-rootとが作成され/dev/mapper/foo-homeます。それらは同じボリュームグループに属していると仮定します。そうでなければ、これはより複雑になり、2つのボリュームグループの物理ボリュームレイアウトに依存します。

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

注:vg_(マシン名)およびlv_homeと呼ばれます
Nick ODell

わかった、うまくいった。ただし、このガイドにはいくつかの詳細が記載されていなかったため、すぐにコマンド履歴全体を掲載します。
ニックODell

2

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-これで安全な位置になりました。ここで再起動してもOKです
  8. lvresize -l +100%FREE centos/root
  9. xfs_growfs /dev/centos/root CentOS 7では、他の人が使用する可能性があります resize2fs
  10. df -h 成功しましたか?

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


データを移行する必要がなければ、間違いなく簡単です。:)
ニックODell
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.