我需要进入一个比我所在位置更大的分区来导入一个不适合我当前所在位置的项目。我还在 Windows 上的虚拟机上运行 Linux。
jack@ubuntu:~$ sudo lsblk -o NAME,FSTYPE,SIZE,MOUNTPOINT,LABEL
NAME FSTYPE SIZE MOUNTPOINT LABEL
sda 20G
ââsda1 ext4 15.7G /
ââsda2 1K
ââsda5 swap 4.3G [SWAP]
sdc 40G
ââsdc1 ext4 40G work
sdb 20G
ââsdb1 ext4 20G /mnt/disk
jack@ubuntu:~$ sudo fdisk -l
Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders, total 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000750e0
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 32956415 16477184 83 Linux
/dev/sda2 32958462 41940991 4491265 5 Extended
/dev/sda5 32958464 41940991 4491264 82 Linux swap / Solaris
答案1
如果您将/
分区放在 的末尾sda
,您将有一个简单的升级过程:
关闭虚拟机,然后在虚拟机管理界面中调整原始磁盘驱动器的大小。
启动到单用户模式,调整最后一个分区的大小以扩展到新空间。
对夹在另外两个分区之间的分区执行此操作可能会带来更多麻烦,而不是值得。
因此,我建议您将分区的部分内容移动/
到新磁盘:
关闭虚拟机,然后添加另一个虚拟磁盘。
调整其大小以容纳要移动到新磁盘的现有内容
/
,以及您想要剩余的空间。假设您正在使用 16 GiB 中的 14 GiB/
,并且您只想移动/home
10 GiB。如果您想要将当前空间增加一倍,则可以将新驱动器设为 20 GiB。您不想移动任何核心操作系统目录:
/bin
、/boot
、/etc
、/root
、 大部分...移动到其他磁盘/usr
是安全的。/usr/share
/usr/local
启动备份,最好进入单用户模式。 (如果您没有运行大量后台内容,这将使以后的事情变得更容易。)
然后,找出
/dev
您的新磁盘所在的节点。有很多方法去做这个。它是最有可能的/dev/sdb
,但/dev/sdc
例如,它可能会被放置在先前映射的光盘驱动器之后。/dev/sdb
为了解释的目的,我们在这里进行假设。用于
parted
对这个新的虚拟磁盘进行分区:# parted /dev/sdb (parted) mklabel gpt (parted) mkpart ext2 1 -1 (parted) quit
这将接管整个虚拟磁盘。如果将来再次用完磁盘容量,这将允许您使用上面更简单的调整大小过程。
如果您计划移动大量不相关的目录(例如
/home
、/var
和/usr/local
),最好为每个目录创建一个单独的虚拟磁盘,而不是对一个大磁盘进行分区。分区是我们在真实磁盘世界中容忍的一种黑客行为。当您处理虚拟机时,您可以摆脱多个独立硬盘的成本。在临时位置创建并安装新文件系统。我通常称它们为
/mnt/newhome
:# mkfs.ext4 /dev/sdb1 # mkdir -m 400 /mnt/newhome # mount /dev/sdb1 /mnt/newhome
复制要移植的树的当前内容,确保复制权限。做这件事有很多种方法:
# cd /home # find . -print | cpio -pd /mnt/newhome OR # cp -aR * /mnt/newhome OR # rsync -a * /mnt/newhome
检查
/mnt/newhome
内容是否可信。例如,是否df -h
显示与 大致相同的值?du -h /home
启动进入单用户模式(如果尚未启动)。
将旧文件系统移开,然后将新文件系统放在其上:
# cd / # mv home oldhome # mkdir -m 400 home # umount /mnt/newhome # mount /dev/sdb1 /home # chmod 755 home # chown root.root home
最后两个命令只是示例。为新挂载点提供与旧挂载点相同的所有者、组和权限。 (不要指望复制命令来获取此顶级目录的权限。)
在出现单用户模式提示时说
exit
,继续启动至多用户模式。 (或者,init 5
例如,如果正常运行级别为 5。)检查一切似乎都适用于新文件系统。(不要重新启动来进行此测试!新的文件系统还不会自动挂载。)
当您对已成功移动该分区感到满意时,请调整
/etc/fstab
以指向新分区。(这超出了本答案的范围。具体细节甚至在 Linux 之间也有所不同,并且一般来说 *ix 之间的差异更大。)
重启正常。再检查一遍。这一切还有效吗?确保您已安装新的文件系统,而不是旧的文件系统。
当您确定所有内容都已移动并正确安装时,请释放旧副本占用的空间:
rm -rf /oldhome
。
如果您有多个文件系统要移动,GOTO 2
. :)(或者步骤 1,如果您没有一次添加所有新虚拟磁盘。)
如果您使用的 VM 系统知道如何设置稀疏虚拟磁盘(例如 VMware),则不必担心空间浪费。只需按照正常的“收缩”过程来回收现在闲置的空间即可。
还有其他改进。例如,如果您的操作系统使用磁盘标签而不是分区名称或 UUID,您可能需要-L /home
为命令提供类似的内容。mkfs.ext4
/etc/fstab