再起動せずにsystemdで/var /usrを安全にアンマウントする方法

再起動せずにsystemdで/var /usrを安全にアンマウントする方法

仮想マシンにLinuxサーバーがあり、サードパーティのプロバイダの構成エラーのため、再起動は電源を切るように動作します。仮想マシン構成にアクセスできません。

システムをインストールした人は誰もがストレージスペースを台無しにし、無責任に各ディレクトリ(、、/varなど/home... /usr)に支店を設置し、一部のディレクトリには空腹になり、他のディレクトリには空にしました。

この混乱を解決するためにマウントポイントを再構成しており、次の手順を実行してから、後で使用するプロセスを再開してmount --bind / /mntほとんどを管理できました。rsyncumount

問題は、systemd initプロセス自体が/var/usrそれがsystemd-remount-fsうまくいくでしょうか?どうすればいいですか?fstab簡単な編集でrsync十分ですか?すべてのサービスが再起動しますか?

私の場合、どのポイントに別々のパーティションが必要かを知っていますが、そうでは/varありません/usr

前提は、パーティションを再マウントした後にパーティションを破壊する必要があるため使用できないことであり、誤って設定されたこのVMに同じバグ効果があるかもしれないため、再起動できないことをumount -l防止したいと思います。kexec

私は圧縮されたパーティションを作成し、btrfsほぼ静的な状態になった後、必要なスペースを最小限に抑えながら、他のすべてのパーティションをまとめる予定です。将来的には、設定エラーを簡単に検出できるようにルートとマウントを配置することもできます。再起動せずにこれをすべて実行できることを願っていますが、それができるかどうかはわかりません。/var/logbtrfsxfs/var/lib/dockersquashfsoverlayfs

ベストアンサー1

警告する:これらのタスクは非常に危険なので、すべてのステップを理解して実行することをお勧めします。これを行わないと、システムが破損する可能性があります。その使用から。

同じことができるかどうかわからない場合は、元のサーバーに影響を与えずにこれらのコマンドを試みるために、すべてのサーバーディスクを自分のワークステーションのローカル仮想マシンに複製しました。広範な研究と多くの実験の終わりについに解決策を見つけました。

一部のシステムではinitrdでシステム化、ターゲットルートをマウントした後、chrootを使用しているかのようにsystemd環境を切り替えて、すべてのサービスを終了してから、新しい環境で再起動します。

この機能を利用して、ルートディレクトリを再度変更できます。他のディスクの複製環境でこれを行うと、以前の環境にあったシステムのロックが解除されるため、安全にポイントをマウント解除できます。実際にはほとんど決して解放されません。まったくマウントしないでください。ただし、レプリケーション環境はネットワークを再起動し、SSHアクセスを提供するように適切に設定する必要があります。そうでない場合は、自分が運命にあると考えてください。

重要なのは、別々のパーティションがあることです。デバイス自体以外のパーティション内のディレクトリにchrootすると、システムはまだ親パーティションのデバイスを保存できます。このユースケースでは、その目的を考慮する必要があり、そうではありません。何でもブロックしてください。

未割り当ての空き領域がある場合、またはレプリケーション環境用のスペースを確保するために一部のパーティションを縮小できる場合にお勧めします。ただし、空き容量がなく、十分なメモリがある場合は、仮想メモリマウントポイントを作成できます。このプロセス中に接続が切断される可能性があるため、ネットワークパーティション化はお勧めできません。

仮想メモリのマウントポイントは次のように実行できますが、tmpfs以前の環境でこのメモリをロックするため、またはなしでメモリを解放することはできませんrebootkexecより良い方法は、次を使用することです。zram、ストレージデバイスの作成に加えてデータを圧縮するため、5Gデータを書き込むと実際にはそれよりはるかに少ないメモリを使用しますが、まだ十分なメモリが必要です。

たとえば、十分であれば、7G次のように生成できます。

sudo modprobe zram num_devices=4
echo 7G | sudo tee /sys/block/zram0/disksize
sudo mkfs.ext4 -m0 /dev/zram0

レプリケーション環境に必要なパーティションを構成すると、その仕組みは次のとおりです。

mkdir /tmp/sys
sudo mount /dev/zram0 /tmp/sys # or the target device in place of zram0
# mount other separate partitions if required
sudo tar -cpSf - \
    --acls --xattrs --selinux \
    --exclude '/dev/*' \
    --exclude '/run/*' \
    --exclude '/sys/*' \
    --exclude '/proc/*' \
    --exclude '/tmp/*' \
    --exclude '/var/tmp/*' \
    --exclude '/var/run/*' \
    / |
    sudo tar -xvf - \
        --acls --xattrs --selinux \
        -C /tmp/sys

fstab以下をバックアップすることをお勧めします。

sudo cp -a /tmp/sys/etc/fstab /tmp/sys/etc/fstab-
sudo truncate -s0 /tmp/sys/etc/fstab

一部のデバイスのパーティションをメモリに変更する場合は、swapまず無効にすることをお勧めします。

sudo swapoff -a

次にchrootを実行します。

sudo mkdir /sysroot
sudo mount --rbind /tmp/sys /sysroot
sudo touch /etc/initrd-release
sudo systemctl --no-block isolate initrd-switch-root
# it will stop all other services (isolate) and call systemctl switch-root /sysroot

chrootを実行するときに通常行うのと同じように、バインディングは必要なく、systemdはこれを行いますprocdev接続が失われた可能性があります。しばらく待っても接続できない場合は、喪を表します。あなたは無駄です。

ただし、幸運にも今すぐ接続できる場合は、必要なパーティションテーブルの変更を実行できます。

blkid新しいパスと一致するようにデバイスパスとuuid()を調整することが重要です。

sudo mv /etc/fstab- /etc/fstab
sudo vi /etc/fstab
sudo vi /etc/default/grub

変更が完了したら、同じ戦略を実行して実際のルートデバイスに戻すことができます。作業が完了したら、シャットダウン時に復元できるように、新しい環境にブートローダをインストールすることを忘れないでください。

sudo grub2-install /dev/sda # or the intended bootable disk
sudo grub2-mkconfig -o /etc/grub2.cfg

物理デバイスに戻した後、そのデバイスを使用している場合は、次の手順でzramメモリを解放できます。

echo 1 | sudo tee /sys/block/zram0/reset
sudo modprobe -r zram

これを行うときに発生するリスクは、ユーザー自身の責任であることを覚えておいてください。

おすすめ記事