![Linux (debian 9) - ルート パーティションがいっぱい: ディレクトリを / から外部ドライブに移動する](https://rvso.com/image/1711443/Linux%20(debian%209)%20-%20%E3%83%AB%E3%83%BC%E3%83%88%20%E3%83%91%E3%83%BC%E3%83%86%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%8C%E3%81%84%E3%81%A3%E3%81%B1%E3%81%84%3A%20%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%82%92%20%2F%20%E3%81%8B%E3%82%89%E5%A4%96%E9%83%A8%E3%83%89%E3%83%A9%E3%82%A4%E3%83%96%E3%81%AB%E7%A7%BB%E5%8B%95%E3%81%99%E3%82%8B.png)
単一のストレージ デバイスにインストールされた 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
/home
UUID
blkid
# 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
が、おそらく小さいのでそのままにしておいても害はほとんどありません。