web-dev-qa-db-ja.com

小さいデバイスでのcentos7xfslmvのクローン作成

1週間前にstackoverflowに投稿された質問を再提案します。誰かがこのスパムを見つけた場合は申し訳ありませんが、この問題を解決するにはまだサポートが必要です。他の人にも役立つと思いました。まず、企業ポリシーとして非準拠のハードウェアで実行されるCentos7ベースのサーバーがあります。フォールトトレランスをサポートする必要があります。

どうやら単純なものと衝突しています。

サーバーをRAIDコントローラーの背後に配置する必要があります。つまり、CentOS 7インストールをケーブル接続されたデバイス(3wareコントローラー9650se-2lp、コンピューターはHPビジネスクラスのDC7600 Convertible Minitower)に移動する必要があります。

私の問題は、採用されたファイルシステムから始まります。これは、設計によって削減できないXFSです。コントローラがファームウェアを格納しているため、コントローラから見える同じディスクが小さく見えるため、これを減らす必要があります。

私のシステムは、LVMボリュームを備えたCentOS7のデフォルトインストールです。デバイスマッパーがどのように機能するかについての1週間のドキュメントの後、「centos」と呼ばれる1つのボリュームグループと、「root」、「home」、「swap」と呼ばれる論理ボリュームがで​​きました。簡単。

# pvs
  PV         VG     Fmt  Attr PSize   PFree
  /dev/sda2  centos lvm2 a--  148,56g 64,00m
# vgs
  VG     #PV #LV #SN Attr   VSize   VFree
  centos   1   3   0 wz--n- 148,56g 64,00m
# lvs
  LV   VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  home centos -wi-ao---- 96,50g
  root centos -wi-ao---- 50,00g
  swap centos -wi-ao----  2,00g

次に、レイアウト全体を縮小する必要があります。これにより、sda2から「ホーム」lvmを縮小できます。現在は148,56Gであるのに130Gに新規設置する予定だったので、18,56Gの「ホーム」を減らすことを考えました。

まず、fdiskを新しいディスクに移動して新しい2つのボリューム、sdb1とsdb2を作成します。その後、論理ボリュームの処理を開始しました。

# pvcreate /dev/sdb2
  Physical volume "/dev/sdb2" successfully created.
# vgextend centos /dev/sdb2
  Volume group "centos" successfully extended
# pvs
  PV         VG     Fmt  Attr PSize   PFree
  /dev/sda2  centos lvm2 a--  148,56g  64,00m
  /dev/sdb2  centos lvm2 a--  130,00g 130,00g

# lvcreate --size 77,50G --name home1 centos
  Logical volume "home1" created.
# mkfs.xfs /dev/centos/home1
meta-data=/dev/centos/home1      isize=512    agcount=4, agsize=5079040 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=20316160, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=9920, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

# lvcreate --size 50,00G --name root1 centos
# mkfs.xfs /dev/centos/root1
# lvcreate --size 2G --name swap1 centos
# mkswap /dev/centos/swap1

その後、livecd Clonezillaから、パーティションテーブルを書き換えずにsdb1にsda1のクローンを作成し、コマンドラインから論理ボリュームをマウントしてデータをコピーしました。 ddは空白スペースもコピーし、新しい家が縮小されるため、私が最も優れているとわかっている単純なddを使用することはできません。

# mkdir /mnt/home
# mkdir /mnt/home1
# mount -o ro /dev/centos/home /mnt/home
# mount /dev/centos/home1 /mnt/home1
# cd /mnt/home
# find . -mount -print | cpio -pdm /mnt/home1
5885177 blocks
# cd /
# umount home
# umount home1
# mkdir /mnt/root
# mkdir /mnt/root1
# mount -o ro /dev/centos/root /mnt/root
# mount /dev/centos/root1 /mnt/root1
# cd /mnt/root
# find . -mount -print | cpio -pdm /home/root1
43415372 blocks

これで、コンピューターの電源を切り、sdaディスクのケーブルを外し、マザーボードの最初のsataポートにsdbを移動しました。今、sdaは私のプリンの手から安全です。最高のものはまだ来ていません。

何もコピーせずにClonezillaから再度起動し、クリーンアップして論理ボリュームの名前を変更しました。

# vgreduce --removemissing --force centos
WARNING: Device for PV 0tJwU5-KA41-LEJa-hhFG-SIzx-RGq3-fJNzkm not found or rejected by a filter.
WARNING: Removing partial LV centos/swap.
Logical volume "swap" successfully removed
WARNING: Removing partial LV centos/home.
Logical volume "home" successfully removed
WARNING: Removing partial LV centos/root.
Logical volume "root" successfully removed
Wrote out consistent volume group centos.
# lvrename /dev/centos/root1 /dev/centos/root
Renamed "root1" to "root" in volume group "centos"
# lvrename /dev/centos/home1 /dev/centos/home
Renamed "home1" to "home" in volume group "centos"
# lvrename /dev/centos/swap1 /dev/centos/swap
Renamed "swap1" to "swap" in volume group "centos

最後に、grub2をインストールしました。

# mount /dev/centos/root /mnt
# mount /dev/sda1 /mnt/boot
# mount --bind /dev /mnt/dev &&
mount --bind /dev/pts /mnt/dev/pts &&
mount --bind /proc /mnt/proc &&
mount --bind /sys /mnt/sys
# chroot /mnt
# grub2-install /dev/sda
# grub2-install --recheck /dev/sda
# grub2-mkconfig -o /boot/grub2/grub.cfg

Grub1のupdate-grubを置き換えるgrub2-mkconfigの警告を修正し、lvm2-lvmetadの前に使用したことのない新しいサービスを有効にしました。

# grub2-mkconfig -o /boot/grub2/grub.cfg
WARNING: Failed to connect to lvmetad. Falling back to device scanning.
WARNING: Failed to connect to lvmetad. Falling back to device scanning.
Found linux image: /boot/vmlinuz-3.10.0-514.21.2.el7.centos.plus.x86_64
Found initrd image: /boot/initramfs-3.10.0-514.21.2.el7.centos.plus.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-6f6078afdaf94da59deb321bd428dfdf
Found initrd image: /boot/initramfs-0-rescue-6f6078afdaf94da59deb321bd428dfdf.img
WARNING: Failed to connect to lvmetad. Falling back to device scanning.
WARNING: Failed to connect to lvmetad. Falling back to device scanning.
done

# systemctl enable lvm2-lvmetad.service
# systemctl enable lvm2-lvmetad.socket
# systemctl start lvm2-lvmetad.service
# systemctl start lvm2-lvmetad.socket

もちろん、サービスの開始はlivecdからは機能しませんでした。

システムを再起動すると、SELinuxでいくつかの問題が発生しました。ログインが完了すると、ローカルよりもリモートから、sshであるかどうかに関係なく、バウンスし続けます。もちろん、livecdからSELinuxをpermissiveに設定するのは簡単ですが、これは本番サーバーであり、mediawikiやgitなどの開発用サービスをホストします。クローンドライブの使用を開始できず、ほぼバグのあるシステムに新しいデータを配置できません。何が間違っているのかわかりません。 SELinux関連のパッケージを再インストールしようとしましたが、何が悪いのかまったくランダムにわかりません。私は何かが足りないのですか?

答えてくれてありがとう、よろしく。

2
rivaldid

次のすべての手順(ブートローダーのインストールを除く)は、実行中のシステムで実行されます。

1.sdbにパーティションを作成します

Sdbにパーティションを作成したのと同じように。 sdb1の開始値と終了値がsda1と同じであることを確認してください。以前と同じようにsdb2を作成します(つまり、notドライブの残り全体)

2.sda1をsdb1にクローンします

/ dev/sda1を読み取り専用モードでmount -o remount,ro /bootを使用して再マウントし、パーティションdd if=/dev/sda1 of=/dev/sdb1のクローンを作成します。

3.ドライブを交換し、sdbが起動することを確認します

Sdaとsdbを交換します。 new sdaにブートローダーをインストールし、新しいsdb(つまり元のドライブ)が接続されていないときにブートローダーがカーネルをロードすることを確認します。ルートボリュームがないため、ブートはパニックになりますが、ブートできることがわかりました。 sdbを再接続します。

3.ボリュームグループを拡張します

次のように、新しいsda2をボリュームグループに追加します:pvcreate /dev/sda2およびvgextend centos /dev/sda2

4.スワップボリュームとルートボリュームに移動します

次のコマンドは、ボリュームを新しいドライブにmove not cloneします。ただし、は同じボリュームグループにとどまります

pvmove -n swap /dev/sdb2 /dev/sda2
pvmove -n root /dev/sdb2 /dev/sda2

5./homeのクローンを作成します

Sda2に/ homeの新しいボリュームを作成し、どこかにマウントして、xfsdumpとxfsrestoreを使用してコンテンツのクローンを作成します。

lvcreate --size 77,50G --name new_home centos /dev/sda2
mount /dev/centos/new_home /mnt
xfsdump -J /home | xfsrestore -J /mnt

6.selinuxラベルが転送されたことを確認します

ls -Z /homels -Z /mntが一致することを確認します

7.ホームボリュームの名前を変更します

両方のホームボリュームをアンマウントし、それに応じて名前を変更します

umount /home
umount /mnt
lvrename centos/home centos/old_home
lvrename centos/new_home centos/home
mount /home

これで、クローンされた小さい/ homeがマウントされました。ボリュームcentos/old_homeは、まだsdb2にある最後のボリュームです。この時点で、システムは手間をかけずに起動して実行できるはずですが、それでもsdbを取り除く必要があります。

8.クリーンアップ

再起動してすべてが期待どおりに機能することを確認したら、lvremove centos/old_homeを使用して古いホームボリュームを削除できます。 pvsの出力を見ると、sdb2は完全に使用されていないはずです。

この時点で、vgreduce centos /dev/sdb2およびpvremove /dev/sdb2を実行できるため、「古い」ドライブはボリュームグループの一部ではなくなります。

これで、ボックスをシャットダウンして古いドライブを取り外すことができます。

1
Andreas Rogge

問題は、クローン作成プロセスがselinuxファイルラベルをコピーしなかったことです。

許容モードで起動します、touch /.autorelabel、再起動します。システムは、ポリシーのデフォルトのラベルですべてのファイルにラベルを付けます(100%正確ではない可能性がありますが、それでも現在よりもはるかに優れています)。

その後、強制モードで再度起動できるようになります。

2
Andreas Rogge

私がしたことをメモするだけです。注意してください:

1)fdisk/dev/sdbおよび実行:

  • 新しい空のDOSパーティションテーブルを作成します
  • 新しいパーティションを追加します。1はsda1、id 83のようなブート用で、同じ開始と終了です。
  • 新しいパーティションを追加します。LVM用に2つ、ID 8eおよび135Gで、削減する必要があるためsda2未満です
  • パーティション1の起動フラグを切り替えます

2)mount -o remount、ro/boot

3)dd if =/dev/sda1 of =/dev/sdb1

4)再起動

5)私のルートをchrootする

  • マウント/ dev/centos/root/mnt/root /
  • マウント/ dev/sdb1/mnt/root/boot /
  • mount --bind/dev// mnt/root/dev/&& mount --bind/dev/pts && mount --bind/proc/&& mount --bind/sys/mnt/root/sys
  • chroot/mnt/root /

6)ブートローダーをインストールします

  • grub2-install/dev/sdb
  • grub2-install --recheck/dev/sdb
  • grub2-mkconfig -o /boot/grub2/grub.cfg

7)シャットダウン

8)ドライブを交換します

9)すべてが正常に実行されていることを確認します

  • 現在、sda(新しいドライブ)からのブートとsdb(古いドライブ)からのルートを使用しています

10)pvcreate/dev/sda2

11)vgextend centos/dev/sda2

12)pvmove -n swap/dev/sdb2/dev/sda2

13)pvmove -n root/dev/sdb2/dev/sda2

14)yum install xfsdump

15)lvcreate --size 80G --name new_home centos/dev/sda2

16)mkfs.xfs/dev/centos/new_home

17)マウント/ dev/centos/new_home/mnt/root /

18)xfsdump -J-/home | xfsrestore -J-/mnt/root /

19)同じSelinuxラベルを確認する

  • ls -Z/home /
  • ls -Z/mnt/root /

20)umount/mnt/root /

21)lvrename/dev/centos/home/dev/centos/old_home

22)lvrename/dev/centos/new_home/dev/centos/home

23)マウント/ home /

  • ホームのマウント解除でエラーが発生しましたが、ホームのマウントで新しいものは正常に実行されたと思います

24)再起動し、すべて正常に実行されています

25)lvremove/dev/centos/old_home

26)vgreduce centos/dev/sdb2

27)pvremove/dev/sdb2

28)sdbをシャットダウンして切断します

終了します。

0
rivaldid