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関連のパッケージを再インストールしようとしましたが、何が悪いのかまったくランダムにわかりません。私は何かが足りないのですか?
答えてくれてありがとう、よろしく。
次のすべての手順(ブートローダーのインストールを除く)は、実行中のシステムで実行されます。
Sdbにパーティションを作成したのと同じように。 sdb1の開始値と終了値がsda1と同じであることを確認してください。以前と同じようにsdb2を作成します(つまり、notドライブの残り全体)
/ dev/sda1を読み取り専用モードでmount -o remount,ro /boot
を使用して再マウントし、パーティションdd if=/dev/sda1 of=/dev/sdb1
のクローンを作成します。
Sdaとsdbを交換します。 new sdaにブートローダーをインストールし、新しいsdb(つまり元のドライブ)が接続されていないときにブートローダーがカーネルをロードすることを確認します。ルートボリュームがないため、ブートはパニックになりますが、ブートできることがわかりました。 sdb
を再接続します。
次のように、新しいsda2をボリュームグループに追加します:pvcreate /dev/sda2
およびvgextend centos /dev/sda2
次のコマンドは、ボリュームを新しいドライブにmove not cloneします。ただし、は同じボリュームグループにとどまります
pvmove -n swap /dev/sdb2 /dev/sda2
pvmove -n root /dev/sdb2 /dev/sda2
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
ls -Z /home
とls -Z /mnt
が一致することを確認します
両方のホームボリュームをアンマウントし、それに応じて名前を変更します
umount /home
umount /mnt
lvrename centos/home centos/old_home
lvrename centos/new_home centos/home
mount /home
これで、クローンされた小さい/ homeがマウントされました。ボリュームcentos/old_homeは、まだsdb2にある最後のボリュームです。この時点で、システムは手間をかけずに起動して実行できるはずですが、それでもsdbを取り除く必要があります。
再起動してすべてが期待どおりに機能することを確認したら、lvremove centos/old_home
を使用して古いホームボリュームを削除できます。 pvs
の出力を見ると、sdb2は完全に使用されていないはずです。
この時点で、vgreduce centos /dev/sdb2
およびpvremove /dev/sdb2
を実行できるため、「古い」ドライブはボリュームグループの一部ではなくなります。
これで、ボックスをシャットダウンして古いドライブを取り外すことができます。
問題は、クローン作成プロセスがselinuxファイルラベルをコピーしなかったことです。
許容モードで起動します、touch /.autorelabel
、再起動します。システムは、ポリシーのデフォルトのラベルですべてのファイルにラベルを付けます(100%正確ではない可能性がありますが、それでも現在よりもはるかに優れています)。
その後、強制モードで再度起動できるようになります。
私がしたことをメモするだけです。注意してください:
1)fdisk/dev/sdbおよび実行:
2)mount -o remount、ro/boot
3)dd if =/dev/sda1 of =/dev/sdb1
4)再起動
5)私のルートをchrootする
6)ブートローダーをインストールします
7)シャットダウン
8)ドライブを交換します
9)すべてが正常に実行されていることを確認します
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ラベルを確認する
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をシャットダウンして切断します
終了します。