CentOSの再起動後、LVMボリュームが非アクティブになる


9

LinuxサーバーをCentOS 6から7に再インストールしました。サーバーには3 /homeつのドライブがあります/home。システムSSDドライブ(それ以外をすべてホストします)と2つの4TB HDDドライブをホストします。すべてLVMを使用しています。2つの4TBドライブは(LVM自体のraidオプションを使用して)ミラーリングされ、/ homeパーティションで完全に満たされます。

問題は、4TBのディスクは問題なく認識され、LVMは問題なくボリュームを認識しますが、ボリュームを自動的にアクティブ化しないことです。それ以外はすべて自動的にアクティブになります。手動でアクティブ化できます。

/ homeに古いシステムドライブのイメージがあります。これにはLVMボリュームも含まれています。でマウントするとkpartx、LVMがそれらを取得してアクティブ化します。しかし、これらのボリュームと非アクティブなボリュームの間に違いはありません。

ルートファイルシステムもLVMであり、これは問題なく起動します。

ただし、奇妙なことがわかります。実行するlvchange -aayと、アクティブ化するドライブを指定する必要があることがわかります。自動的には行われません。私が指定した場合lvchange -ay lv_home-それは動作します。

私はこの振る舞いの原因となるものを見つけることができません。

追加:(initを使用していvgchange -aay --sysinitた)古いシステムが起動スクリプトにあることに気づきました。新しいものはsystemdを使用しておりvgchange、そのスクリプトには呼び出しが表示されません。しかし、どこに置くべきかもわかりません。

追加2: systemdを理解し始める。私はスクリプトがどこにあるかを見つけて、それらがどのように呼び出されるかを理解し始めました。また、実行されたスクリプトをで確認できることもわかりましたsystemctl -al。これは、起動後に既知の各udevブロックデバイスをlvmetad呼び出すことを示していpvscanます。ただし、その時点で登録されているudevブロックデバイスは1つだけであり、これは認識されたlvmボリュームの1つです。ハードドライブもそこにありますが、異なるパスとはるかに長い名前の下にあります。認識されたブロックデバイスはのようなものですが8:3、ハードドライブはのようなもの/device/something/です。私はもうサーバーにいないので、正確に書くことはできません(これは後で修正します)。

私はそれがudevとデバイスの検出/マッピングに関係していると思います。私は夕方まで続き、その時にudevを勉強します。

他のすべてが失敗した場合、私は呼び出すスクリプトを見つけ、pvscan常にすべてのデバイスをスキャンするように変更できることを確認しました。これで問題は解決しましたが、見苦しいハックのように見えるので、本当の根本原因を解明しようと思います。

追加3:わかりましたこれがなぜ発生するのはまだわかりませんが、少なくともかなり問題のない回避策を講じています。をpvscan起動しlvmetadた直後に、もう一度を呼び出すsystemdサービスを作成しました。特定のデバイスに対するもう1つの呼び出しはまだあり、実際にudevそれを呼び出すのはそれだと私は思います(それが私がそれへの参照を見つけた唯一の場所です)。なぜそれが他のハードドライブのためにそれを呼び出さないのですか-私にはわかりません。


LVMシステムサービスは実行されていますか?これは私に起こりました。
Naftuli Kay、2015

@NaftuliTzviKay-はい、サービスは正常に開始されています(少なくともlvmetad-他には気づいていません)。
Vilx- 2015

現在、名前が私を避けている別のサービスがありました。
Naftuli Kay、2015

@NaftuliTzviKay-うーん...なんらかの「監視」サービスもありました。それもうまくいきますが、それが何であるかを読んで、それが私には当てはまらないという結論に達したことを覚えています。ただし、現時点ではボックスにアクセスできないため、後でもう一度確認します。
Vilx- 2015

回答:


7

やったよ!やったよ!私はそれを適切に修正しました(私は思う)。

ストーリーは次のとおりです。

しばらくすると、サーバーに障害が発生し、廃棄する必要がありました。私はディスクを保持し、他のすべてのものを新しいものにしました。次に、SSDにCentOSを再インストールし、HDDを取り付けました。LVMはうまく機能し、ディスクは認識され、構成は保持されました。しかし、同じ問題が再び発生しました-再起動後、ボリュームは非アクティブでした。

ただし、今回は別のことに気づきました。ブートローダーは次のパラメーターをカーネルに渡します。

crashkernel = auto rd.lvm.lv = centos / root rd.lvm.lv = centos / swap rhgb quiet

うーん、ちょっと待ってください、それらは見慣れたものに見えます

クイックグーグルクエリ、そして私たちはそこにいます

rd.lvm.lv =

指定された名前の論理ボリュームのみをアクティブ化します。rd.lvm.lvは、カーネルコマンドラインで複数回指定できます。

さて。なるほどね!

したがって、解決策は(さらにいくつかのgoogleクエリから収集された):

  1. /etc/defaults/grubパラメータに追加のボリュームを含めるように変更します。crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swaprd.lvm.lv=vg_home/lv_homerhgb quiet
  2. でGRUBを再構成する grub2-mkconfig -o /boot/grub2/grub.cfg
  3. initramfsをで再構成しmkinitrd -f -v /boot/initramfs-3.10.0-327.18.2.el7.x86_64.img 3.10.0-327.18.2.el7.x86_64ます。注:値は異なる場合があります。uname -rカーネルバージョンを取得するために使用します。または単に読んでくださいmkinitrd。(率直に言って、なぜこの手順が必要なのかはわかりませんが、どうやらそうです-それなしで試してみましたが、うまくいきませんでした)
  4. そして最後に、grubを再インストールします。 grub2-install /dev/sda
  5. 当然、再起動します。

たーだ!ボリュームは再起動時にアクティブになります。追加してfstabお楽しみください!:)


2

マイナーアップデート(EFI (非BIOS)マシン上のRHEL 7の場合):

私はこれらのステップを使用して成功する必要があります:

  1. /etc/defaults/grubパラメータに追加のボリュームを含めるように変更します:(およびrd.lvm.lv=rhel/homeに加えて)rhel/rootrhel/swap
  2. でGRUBを再構成する

    grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
    

    注:別のパス!)

  3. initramfsを再構成します

    mkinitrd -f -v /boot/initramfs-$(uname -r).img $(uname -r)
    
  4. 再インストールgrubをスキップ:(grub2-install /dev/sda私は空のディレクトリを持っているため/usr/lib/grub/
  5. 当然、再起動します。

うーん、EFIを使用しているようです。私の場合はBIOSボックスだったので、たぶん違います。
Vilx-2016

はい、x240ブレードです。EFIに関するメモを追加しました。
jno 2016

@ Vilx- このバグに対してベンダーが提案する回避策があります。しかし、それは本当に醜いです。彼らは追加することを提案_netdevするフラグをfstab、有効chkconfig netfs onオフもスイッチで...ただの希望にデバイスが再ポーリングされ、取り上げますuse_lvmetad = 0lvmetad/etc/lvm/lvm.conf
jno

私はRedHatの顧客ではないため、表示できません。しかし、私たちのソリューションが正しくなく、別の回避策が必要な理由はわかりません。つまり、これはバグではなく、すべてが想定どおりに機能しています。
Vilx- 2016

私はそれはバグだと思います:rootとswapはカーネルcmdlineに明示的にリストされていますが、homeはそうではありません。したがって、2つのLVMボリュームがマウントされ、1つが「非アクティブ」状態でダングリングされています。特定のアクセス資格情報の必要性を回避するために、ここではそれらの提案を正確に引用しました:)
jno

1

私にもこの問題がありました。私の場合、それはiscsi、マルチパス、lvmの組み合わせとセッション作成の順序などでした。への呼び出しを追加することで問題を解決し/sbin/vgchange -a yました/etc/rc.local


0

だから私は/ etc / default / grubのrd.lvm.lv =設定を試しましたが、それはうまくいきませんでした

ブート時にアクティブになるには、ssd_vgボリュームグループの両方の論理ボリュームが必要です。また、kubuntu-vg上の論理ボリュームhome_lvをアクティブにする

機能したのは、/ etc / lvm / lvm.confを編集することでした。ボリュームリストセクションで、これをvolume_list = ["ssd_vg"、 "kubuntu-vg / home_lv"]に入れます。

再起動後の結果

$ sudo lvscan inactive Original '/ dev / kubuntu-vg / root' [50.00 GiB] inherit

inactive          '/dev/kubuntu-vg/swap_1' [7.88 GiB] inherit

ACTIVE            '/dev/kubuntu-vg/home_lv' [1000.00 GiB] inherit

inactive Snapshot '/dev/kubuntu-vg/root_snap11' [50.00 GiB] inherit

inactive Snapshot '/dev/kubuntu-vg/root_snap12' [50.00 GiB] inherit

ACTIVE            '/dev/ssd_vg/root' [224.02 GiB] inherit

ACTIVE            '/dev/ssd_vg/swap_1' [7.88 GiB] inherit

0

私の場合、/ etc / lvm / lvm.confのこの行にコメントを付けました

auto_activation_volume_list = [ "vg00", "vg01" ]

なぜなら、アクティブな場合、ボリュームvg00とvg01のみがブート時にアクティブだからです。

lvm.confのドキュメント:

If auto_activation_volume_list is defined, each LV that is to be
activated with the autoactivation option (--activate ay/-a ay) is
first checked against the list. There are two scenarios in which
the autoactivation option is used:

  - automatic activation of volumes based on incoming PVs. If all the
    PVs making up a VG are present in the system, the autoactivation
    is triggered. This requires lvmetad (global/use_lvmetad=1) and udev
    to be running. In this case, "pvscan --cache -aay" is called
    automatically without any user intervention while processing
    udev events. Please, make sure you define auto_activation_volume_list
    properly so only the volumes you want and expect are autoactivated.

  - direct activation on command line with the autoactivation option.
    In this case, the user calls "vgchange --activate ay/-a ay" or
    "lvchange --activate ay/-a ay" directly.

By default, the auto_activation_volume_list is not defined and all
volumes will be activated either automatically or by using --activate ay/-a ay.

N.B. The "activation/volume_list" is still honoured in all cases so even
if the VG/LV passes the auto_activation_volume_list, it still needs to
pass the volume_list for it to be activated in the end.

If auto_activation_volume_list is defined but empty, no volumes will be
activated automatically and --activate ay/-a ay will do nothing.

auto_activation_volume_list = []

If auto_activation_volume_list is defined and it's not empty, only matching
volumes will be activated either automatically or by using --activate ay/-a ay.

  "vgname" and "vgname/lvname" are matched exactly.
  "@tag" matches any tag set in the LV or VG.
  "@*" matches if any tag defined on the host is also set in the LV or VG


Only activate vg00 and vg01 automatically.
auto_activation_volume_list = [ "vg00", "vg01" ]
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.