当方の場合、debian でも ubuntu でもファイルシテムは xfs を主に使っているのですが、古い xfs を使っているシステム(例えば ubuntu 1604, 2004, debian 10) からは新しい xfs を使っているシステム (例えば debian 12) をマウント出来ません。(RedHat系でも同じ様です。)つまり、古いシステムをクローンする場合、新しいシステムで古いシステム用に新しい mkfs.xfs を使用してフォーマットすると古いシステムは認識できず起動できません。なので、古いシステムをクローンするには、古いシステムを稼働させて、古い mkfs.xfs を使ってシステムディスクを作成・複製するか、20250202追記:もしくは、以下のようにしてフォーマットして複製する必要があります。
文章で説明すると長いのですが、クローンそのものは、以下のようにシンプルです。
20250202追記:リモートの稼働中システムをローカル /mnt にクローンする場合は、以下の通りです。
20250203追記:次にクローンしたディスクでスワップパーティションを作成し、mkswapでスワップパーティションをフォーマットしておきます。
最後は /etc/fstabを更新し、/boot/grub/grub.cfg を作成し grub-install で usb ドライブ から(レガシー BIOS で) 起動できるようにします。
追記20250201:クローンしたデバイスからブートさせるには、上述に加え、例えば fdisk コマンドを使って、該当パーティションの boot flag を on にする必要があります。そうでないと、BIOSのブートメニューに該当ドライブが表示されない場合があります。例えば該当パーティションが /dev/sdc1 で fdiskを使う場合以下のようにします。
今回は以上です。それでは。
mkfs.xfs -m crc=0,finobt=0 -f /dev/sdc1しかし、オフラインでない稼働中のシステムをクローンする場合、例えば /dev (devfs)や/proc以下には稼働中はファイルが存在するので rsync でそのままコピーする訳には行きません。なので、/devや/procなどはディレクトリーを作成するだけにし、また、/ にあるシンボリックリンクは別途コピーし、それ以外を rsync で usb ドライブ にコピーし、/boot/grub/grub.cfg を作成したり、/etc/fstabなどを書き換えることで、起動できたので、備忘録として挙げてみることにしました。
文章で説明すると長いのですが、クローンそのものは、以下のようにシンプルです。
DEST=mnt-d SRC=sda1 TGT=sdd1 # 以下間違えると危険なので、コメントにしています。 # mkfs.xfs -f /dev/$TGT mkdir -p /tmp/$DEST mount /dev/$TGT /tmp/$DEST cd /tmp for d in bin boot etc home lib lib64 media mnt opt root sbin snap srv usr var; do rsync -aAXHxSvp --numeric-ids /$d/ $DEST/$d/;done for d in dev proc run sys tmp; do mkdir -p $DEST/$d;done for l in initrd.img initrd.img.old vmlinuz vmlinuz.old;do rsync -aAXHxSvp --numeric-ids /$l $DEST/; doneクローンだけは以上でOKです。
20250202追記:リモートの稼働中システムをローカル /mnt にクローンする場合は、以下の通りです。
DEST=/mnt REMOTE=root@10.1.40.18: for d in bin boot etc home lib lib64 media mnt opt root sbin snap srv usr var; do rsync -aAXHxSvp --numeric-ids $REMOTE/$d/ $DEST/$d/;done for d in dev proc run sys tmp; do mkdir -p $DEST/$d;done for l in initrd.img initrd.img.old vmlinuz vmlinuz.old;do rsync -aAXHxSvp --numeric-ids $REMOTE/$l $DEST/; doneつづいて /etc/hosts /etc/hostname 、 debian / old ubuntu の場合 /etc/network 以下を手動で編集します。
20250203追記:次にクローンしたディスクでスワップパーティションを作成し、mkswapでスワップパーティションをフォーマットしておきます。
最後は /etc/fstabを更新し、/boot/grub/grub.cfg を作成し grub-install で usb ドライブ から(レガシー BIOS で) 起動できるようにします。
DEST=mnt-d SRC=sda1 TGT=sdd1 SRC_SWP=sda2 TGT_SWP=sdd2 # fstab の更新 CUR_UUID=`xfs_admin -u /dev/$SRC | cut -d" " -f3` NEW_UUID=`xfs_admin -u /dev/$TGT | cut -d" " -f3` sed -e "s/$CUR_UUID/$NEW_UUID/g" -i /tmp/$TGT/etc/fstab CUR_SWP_UUID=`sudo blkid /dev/$SRC_SWP | cut -d"\"" -f2` NEW_SWP_UUID=`sudo blkid /dev/$TGT_SWP | cut -d"\"" -f2` sed -e "s/$CUR_SWP_UUID/$NEW_SWP_UUID/g" -i /tmp/$TGT/etc/fstab # grub.cfg の作成 NEW_HN=mv16 cat > /tmp/$DEST/boot/grub/grub.cfg <<EOF insmod part_msdos insmod xfs menuentry 'Ubuntu 1604 4.4.0-21-generic (Mellanox OFED 3.4-2.0.0.0) $NEW_HN'{ search --no-floppy --fs-uuid --set=root $NEW_UUID linux /boot/vmlinuz-4.4.0-21-generic root=UUID=$NEW_UUID initrd /boot/initrd.img-4.4.0-21-generic } EOF grub-install --boot-directory=/tmp/$DEST/boot /dev/$TGT追記20250131:スクリプトに誤りがあったので、修正しました。
追記20250201:クローンしたデバイスからブートさせるには、上述に加え、例えば fdisk コマンドを使って、該当パーティションの boot flag を on にする必要があります。そうでないと、BIOSのブートメニューに該当ドライブが表示されない場合があります。例えば該当パーティションが /dev/sdc1 で fdiskを使う場合以下のようにします。
sudo fidks /dev/sdc a 1 w全体をバッチ処理させた方がいいのですが、二台分のコピーだけだったので、そこまで気力・動機がありませんでした。中途半端で申し訳ないんですが、あしからずご了承ください。
今回は以上です。それでは。
コメント
コメントを投稿