Linux(debian 9)-根分区已满:将目录从/移动到外部驱动器

Linux(debian 9)-根分区已满:将目录从/移动到外部驱动器

我有一个安装在单个存储设备上的 Debian 9 系统。

该设备的大小略小于 4 GB,并且有一个分区,其中写入了 debian 映像。

我无法移除此设备。它是嵌入式系统的一部分,并且永久连接。

但是,我可以向系统添加 SD 卡,因为如果需要更大的 FS,则会提供备用插槽供用户扩展。

我的目的是在 SD 卡上创建一个分区,大概是 16 GB 的分区。

我想知道哪些目录可以安全地移动到 SD 卡?我该怎么做?

例如,许多 Linux 系统将 /home 文件夹移动到单独的物理设备或单独的分区。

所以我知道我可以在 SD 文件系统的根目录上创建一个 /home 目录。我不知道该怎么做,如何告诉 Debian 系统 /home 已经移动了?大概我需要先将原始文件系统上 /home 的所有内容复制到新的 SD 卡上,然后再告诉 Debian 它已经移动了?

我猜测我也可以移动 /tmp 和 /var 文件夹。

还有什么我可以安全移动的吗?我认为在任何情况下都不应该移动 /bin、/sbin 或 /root?

我以前使用过类似的系统,其中 /home 位于不同的磁盘上,但在安装完成后我从来没有移动过它。

我也不知道应该搜索哪些关键词来找到这些信息——如果这听起来像是一个业余请求,我很抱歉。谢谢

答案1

事实上,它/home不是操作系统的必要组成部分,因此这比移动/usr到新设备更可行。如果您要移动一个必要的操作系统层次结构,则需要关闭并从其他rescue或实时 CD 或 USB 文件系统启动。这在您的嵌入式设备上可能很难甚至不可能。

但既然你要动身,/home我们就可以小心翼翼地前进。

首先,启动到单用户模式。停止不必要的服务,尤其是任何可能写入 下文件的服务/home。确保您的pwd不在 /home 下,然后获取 root 权限:

$ 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,并将其替换ext4为您在 'ed SD 卡时使用的文件系统类型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也可以,但是它可能足够小,保留它也没什么害处。

相关内容