Linux (debian 9) - ルート パーティションがいっぱい: ディレクトリを / から外部ドライブに移動する

Linux (debian 9) - ルート パーティションがいっぱい: ディレクトリを / から外部ドライブに移動する

単一のストレージ デバイスにインストールされた Debian 9 システムがあります。

デバイスのサイズは 4 GB より少し小さく、Debian イメージが書き込まれたパーティションが 1 つあります。

このデバイスは取り外すことができません。組み込みシステムの一部であり、恒久的に接続されています。

ただし、より大きな FS が必要な場合、ユーザー拡張用に予備スロットが用意されているため、システムに SD カードを追加できます。

私の意図は、おそらく 16 GB の SD カードに単一のパーティションを作成することです。

SD カードに移動しても安全なディレクトリを知りたいのですが、どうすればいいでしょうか?

たとえば、多くの Linux システムでは、/home フォルダーを別の物理デバイスまたは別のパーティションに移動します。

SD ファイルシステムのルートに /home ディレクトリを作成できることはわかっています。方法がわからないのは、/home が移動したことを Debian システムに通知する方法です。おそらく、移動したことを Debian に通知する前に、元のファイルシステムの /home のすべての内容を新しい SD カードにコピーする必要があるのでしょうか?

/tmp および /var フォルダーも移動できると思います。

他に安全に移動できるものはありますか? どのような状況でも /bin、/sbin、または /root を移動すべきではないと思いますか?

これまでにも、/home が別のディスク上にあるこのようなシステムを扱ったことがありますが、インストールが完了した後にそれを移動する必要はありませんでした。

また、この情報を見つけるためにどのようなキーワードで検索すればよいかわかりませんでした。素人っぽいリクエストのように思われたら申し訳ありません。ありがとうございます。

答え1

これは厳密には OS の必須部分ではないため/home、たとえば新しいデバイスに移行するよりも実現可能です/usr。必須の OS 階層を移行する場合は、シャットダウンして、他のファイルシステムまたはライブ CD または USB ファイルシステムから起動する必要がありますrescue。組み込みデバイスでは、これは困難から不可能までさまざまです。

しかし、あなたが動いているので/home、慎重に進むことができます。

まず、シングルユーザー モードで起動します。 の下にあるファイルに書き込む可能性のある、特に重要でないサービスを停止します/home。 が /home の下にないことを確認してpwdから、ルート権限を取得します。

$ cd /tmp
$ sudo -i

それから:

1) SDカードを挿入し、パーティションを作成します。パーティションを作成したら、新しい/home階層を保持するファイルシステムを作成します。SDカードのパーティションがデバイスであると仮定します。/dev/sdc1

# mkfs.ext4 /dev/sdc1

2) 新しいファイルシステムをマウントします/mnt:

# mount /dev/sdc1 /mnt

3)コピー(移動しないでください) またはrsync階層/homeを SD カードにコピーします (スラッシュに注意してください)。rsyncを実行した後、SD カードをアンマウントします。

# rsync -HAXav /home/ /mnt/
# umount /mnt

4) バックアップ/etc/fstab

# cp -p /etc/fstab /etc/fstab.safety

5) SD カードのファイルシステムを特定しUUID、それをマウントするためのエントリを追加するように編集します。/etc/fstabは、次の方法で見つけることができます。UUID/homeUUIDblkid

# blkid /dev/sdc1
/dev/sdc1: UUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" TYPE="ext4"

上記の出力の場合、新しいfstab行は次のようになります。

UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /home ext4 defaults 0 0

これは Ubuntu の例です。Debian システムが手元にないからです。xxxxx... の部分を SD カード ファイルシステムの正しい UUID に置き換え、 をSD カードを作成したext4ときに使用したファイルシステムの種類mkfs( の出力で確認済みblkid) に置き換える必要があります。

6) 古い/homeディレクトリの名前を変更します。

# mv /home /home.old

7) SD カードの新しいマウントポイントを作成します。

# mkdir /home

この時点で、SD カードを手動でマウントできるはずです。

# mount /home

の下のコンテンツが/homeの下のコンテンツと同一であることを確認します/home.old。ホーム ディレクトリや.sshディレクトリの所有権と権限を含め、コンテンツを慎重に確認してください。そうしないと、システムの再起動時にリモート ログインできなくなる可能性があります。可能であれば、sshd サービスを開始し、権限のないアカウントへのリモート ログインをテストしてください。

すべてが正常であれば、再起動します。システムが再起動したら、マウントされたファイルシステムで使用可能なスペースを確認します。

# df

はまだ残っている/ので、にはまだ空き容量がありません。 には十分な空き容量があるはずです:/home.old/home

# du -h /
# du -h /home

すべてがうまくいったと満足したら、以下を削除します/home.old

# cd /; rm -rf home.old

できますrm /etc/fstab.safetyが、おそらく小さいのでそのままにしておいても害はほとんどありません。

関連情報