emz_style
@emz_style

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

grub2-install でerror: unknown filesystem.が出る

ブートローダの設定をしたい

インフラ系初心者です。よろしくお願いいたします。
AWSでルートボリュームの縮小を試みています。
ワーク用のインスタンスを別に作り、旧システムボリュームから新システムボリュームまでのrsyncでのコピーまではできました。
ですが、grub2-installをしようとするとerror: unknown filesystemとなってしまいます。(xfsを認識しない?)

(ブートローダがダメなので当たり前と思いますが)この状態で元のインスタンスにアタッチしても起動はしません。
この状況を解決したいです。

詳細状況

以下のサイトを参考にしています。
https://study-infra.com/aws-ebs-shrink/
https://blog.kuds.win/aws/reduce-ebs-size-ec2-linux/

デバイスの状況は以下の通りです。/mnt/oldにマウントされている/dev/xvdf1が旧システムボリューム、/mnt/newにマウントされている/dev/xvdg1が新システムボリュームとなっています。すでにコピー済み。

$df -hT
Filesystem     Type   Size  Used Avail Use% Mounted on
/dev/root      ext4   7.6G  1.6G  6.0G  21% /
tmpfs          tmpfs  475M     0  475M   0% /dev/shm
tmpfs          tmpfs  190M  864K  190M   1% /run
tmpfs          tmpfs  5.0M     0  5.0M   0% /run/lock
/dev/xvda15    vfat   105M  6.1M   99M   6% /boot/efi
tmpfs          tmpfs   95M  4.0K   95M   1% /run/user/1000
/dev/xvdg1     xfs     20G   18G  2.4G  89% /mnt/new
/dev/xvdf1     xfs    100G   18G   83G  18% /mnt/old
$ mount -t proc /proc /mnt/new/proc
$ mount -t sysfs /sys /mnt/new/sys
$ mount --bind /dev /mnt/new/dev
$ mount --bind /run /mnt/new/run
$ sudo chroot /mnt/new
# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-1160.66.1.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-1160.66.1.el7.x86_64.img
/usr/sbin/grub2-probe: error: unknown filesystem.
Found linux image: /boot/vmlinuz-3.10.0-327.13.1.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-327.13.1.el7.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-327.4.5.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-327.4.5.el7.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-123.6.3.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-123.6.3.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-5ab5df625df740d28a100a002e3b431a
Found initrd image: /boot/initramfs-0-rescue-5ab5df625df740d28a100a002e3b431a.img
done
# grub2-install /dev/xvdg
Installing for i386-pc platform.
grub2-install: error: unknown filesystem.

となりました。
最初AmazonLinuxで実行してこのエラーとなり、新たに別途ubuntuでインスタンスを作り同じことを試みましたが結果は同じでした。(元のボリュームはcentOSのインスタンスにアタッチされていたものです。)

その他情報

$$ lsblk -f
NAME     FSTYPE FSVER LABEL           UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
loop0                                                                            0   100% /snap/amazon-ssm-agent/7628
loop1                                                                            0   100% /snap/core18/2812
loop2                                                                            0   100% /snap/core20/2015
loop3                                                                            0   100% /snap/lxd/24322
loop4                                                                            0   100% /snap/snapd/20290
xvda
├─xvda1  ext4   1.0   cloudimg-rootfs 9e71e708-e903-4c26-8506-d85b84605ba0      6G    21% /
├─xvda14
└─xvda15 vfat   FAT32 UEFI            A62D-E731                              98.3M     6% /boot/efi
xvdf
└─xvdf1  xfs          /               432413b0-cc2e-4584-bf9f-babcc2caf9cd   82.9G    17% /mnt/old
xvdg
└─xvdg1  xfs          /               17d021af-a367-4b4d-927a-a7bbfe2b3935    2.4G    88% /mnt/new

次の情報を発見しました!

https://unix.stackexchange.com/questions/175728/what-file-system-should-a-grub-2-boot-partition-use
「However, a big problem is that GRUB in fact is not able to recognize just about any filesystem. GRUB last stable release (2.0.2beta) is from 2 years ago, and this is the version that most distributions ship. So, while XFS, for example, was supported back in the time of the release, this filesystem has evolved* in the meantime but GRUB did not follow with a new release. Meaning that GRUB cannot boot from a boot partition that is XFS formatted. The same goes for BTRFS afaik.

GRUB patches for the mentioned changes or new file systems sometimes do exist but it usually means that you would have to compile GRUB entirely yourself if your distribution offers a build package. In case of Arch Linux I had to build Grub-Git from Arch user repositories for XFS boot to work.」
xfsだとダメと書いてある??

となると、そもそもこの方法ではダメなのでしょうか?

なにぶん初心者なので、足りない(or 余計な)情報などもあると思います。
解決のために必要な情報がありましたら、何を出せばよいかご教授いただけると助かります。
よろしくお願いいたします。

0

1Answer

ワーク用のインスタンスで、「grub2-install」をする意味が理解できません。

「/mnt/old」から「/mnt/new」へ必要なデータのみコピーしたらいいのでは?

0Like

Comments

  1. @emz_style

    Questioner

    コメントありがとうございます。
    私の理解度が足りないので、なぜ必要か明確に答えられない可能性あります。
    対象となっているのはルートボリュームです。
    データをコピーしただけでは、起動ディスクとはならないと考えています。つまりブートローダーが無いということかと。そのための作業と思っています。
    いずれにしろ、単なるコピーだけではインスタンスは起動しませんでした。

  2. 「/mnt/old」から必要なデータのみ、他のインスタンスにコピーしたらいいのでは?

    なぜ、丸ごとコピーしかつgrubをインストールする必要があるのでしょうか?

  3. @emz_style

    Questioner

    本来やりたいことは、AWSにおいてルートボリュームサイズを100GBから20GBに縮小したいだけです。(早い話AWSのコスト削減をしたいということです。)
    またどのデータが必要かの情報は持っていないので、選択することは現時点ではできません。(調査すれば可能と思いますが、今回それは考えていません。)
    調べると、この丸ごとコピー方式がいくつか見られたのでその手法を試しています。結果Grubインストールで引っ掛かったということになります。
    ちなみにコピーはrsyncで実行しました。なのでファイルのみをコピーしたのだと理解しています。ルートボリュームは起動用なのでこれだけでは足りないのでは?と推察している次第です。
    方法としては以下のサイトを参考にいたしました。
    https://study-infra.com/aws-ebs-shrink/
    https://blog.kuds.win/aws/reduce-ebs-size-ec2-linux/

    全く同じサイズであればブートセクタまでコピーできるddが良いのかもしれません。ですが、サイズ縮小となるのでその場合どうなるのだろう?というところ不勉強ではあります。

  4. 推測になるけれど、下記のサイトの「7.fstabを変更する。」がうまくいってないことが
    原因だと思われる。

  5. @emz_style

    Questioner

    ありがとうございます。確かにfstabも気になっていました。

    $cat /mnt/old/etc/fstab
    /dev/xvda1      /       xfs     defaults        1 1
    #/dev/xvdf1      /mnt    xfs     noauto          0 0
    /dev/xvdg1      /mnt    xfs     noauto          0 0
    

    これが元のfstabです。上記のサイトではUUIDとなっていますが、こちらはデバイス名となっています。
    なので、アタッチの時点でこのデバイス名称に合わせれば自動マウントされるのではないかと思っています。(ちなみに、xvdf1をxvdg1に変更している部分があります。これは、データボリュームを縮小した時の名残です。これはこれでうまく行っています。)

  6. 下記はどういう状態でしょうか?

    /mnt/new/etc/fstab

  7. @emz_style

    Questioner

    同じです。rsyncでコピーしたからそのまま同じものがあります。
    通常はここにUUIDが入っていて、コピーすると昔のものが反映してしまうので、新しいUUIDに変更すると書かれていました。
    ですが、このtstabではデバイス名称で、UUIDが無いので、そのままにしてあります。(アタッチするときにデバイス名を合わせました。)

  8. 「/mnt/new/etc/fstab」を以下のように編集し、「8.grub2を更新する。」以下を実行するとどうなりますか?

    + #/dev/xvda1      /       xfs     defaults        1 1
    + /dev/xvdg1      /       xfs     defaults        1 1
    
  9. @emz_style

    Questioner

    ありがとうございます。
    とりあえず解決したので、時間のある時に試してみます。
    自己解決方法は以下の通りです。
    1)別のWork用のインスタンスを使うのではなく、元の動いているインスタンスに縮小先ボリュームをアタッチ。
    2)あとはほぼ同じ手順。(ただし、同じsdync時にexclude設定して再帰的にコピーされるのを防ぎました。)
    3)この状態でgrub2を試すと問題なくいきました。(xfs利用)
    もともとのインスタンスのCentOSを使ったのでうまく行ったのかもしれません。
    OS依存のような気がしたので、この方法を試したところうまく行きました。

    いただいた情報は後日試してみたいと思います。

Your answer might help someone💌