我曾经在主机提供的 100GB 空间中,用 5GB 的硬盘设置了一个远程 ubuntu 服务器,只是为了测试。时间飞快流逝,原来我还在使用测试环境,现在我需要更多空间。我的主机允许我将一个新的空磁盘连接到远程机器,大小任意(从剩余的 95GB 中可用)。但这是我从 Web 界面可以做的所有事情:我没有从中管理分区表的选项。所以我将一个 20GB 的硬盘连接到远程机器。
user@snf-217047:~$ sudo fdisk -l
Disk /dev/vda: 5368 MB, 5368709120 bytes
149 heads, 8 sectors/track, 8796 cylinders, total 10485760 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: 0x000619d1
Device Boot Start End Blocks Id System
/dev/vda1 * 2048 10483711 5240832 83 Linux
Disk /dev/vdb: 21.5 GB, 21474836480 bytes
16 heads, 63 sectors/track, 41610 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: 0x00000000
Disk /dev/vdb doesn't contain a valid partition table
我想知道的是我现在该怎么做才能将 20GB 添加到我的系统中。我不想问“如何调整主分区或如何创建新分区”,因为我想看看我的选项。所以问题是我怎样才能使 20GB 磁盘在我的系统中可用?
答案1
这是一个多步骤的过程。
第一的,你需要确认有问题的磁盘的设备节点。有几种方法可以做到这一点,您已经通过 做到了fdisk -l
;在您的例子中,新磁盘的设备节点是 /dev/vdb(这是唯一检测到的不包含有效分区表的磁盘的设备节点)。您可以还想要识别占用大量空间且易于移动到其他分区的目录;根据系统的使用方式,好的候选目录可能是 /home、/opt、/srv 和 /var 下的子目录。不要移动系统需要启动的文件或目录。总是保留 /bin、/boot、/dev、/etc、/lib*、/proc、/run、/sbin 和 /sys,除非您知道确切地你在做什么、为什么做、以及会产生什么后果。小心 /usr。
第二,你需要分割磁盘。使用fdisk
或类似的实用程序执行此操作;fdisk /dev/vdb
应该可以帮助您入门。根据您的预期用途,在其上创建一个或多个分区。如果您需要一些更用户友好的东西,请尝试cfdisk
(您可能需要先单独安装它)。
第三,你需要创建文件系统(在 Microsoft 世界中这称为“格式化”)在您创建的每个分区上。分区后可能需要重新启动;由于不匹配的后果可能很严重,我更喜欢例行这样做,只是为了确保所有系统组件都具有相同的分区表视图。您通常使用mkfs.*
工具系列创建文件系统,但可能存在例外(有些有别名,如 mkfs.ext2,通常别名为 mke2fs)。例如,如果您想在 /dev/vdb2 上创建 ext4 文件系统,您可以运行类似 的命令mkfs.ext4 /dev/vdb2
。首先阅读相关的手册页,了解您可能觉得有用的选项的详细信息。请绝对确保您在这里使用的是正确的设备节点;自满会害死人。
第四,您需要告诉系统将文件系统挂载到您感兴趣的任何挂载点。(这在 Microsoft 世界中通常不是必需的,因为默认情况下分区都分配有驱动器号,并且您只需要在要更改该分配时进行配置即可。)其他 *nix 可能有所不同,但在 Linux 上,这是通过 /etc/fstab 进行的配置,其格式为device mountpoint fstype options dump pass
。dump
并且pass
通常保留在0
,options
通常可以保留在 ,defaults
但根文件系统除外,其他的取决于您的设置。例如,要在挂载点 /srv/www 上的 /dev/vdb3 上挂载 ext4 文件系统,您可以添加如下行:
/dev/vdb3 /srv/www ext4 defaults 0 0
记住顺序的方法是“什么在哪里如何?”。
不要为同一设备节点或挂载点添加多个条目。它甚至可能不起作用(我曾经犯过一个错误,在 上挂载了两个不同的文件系统/
,这引起了各种混乱,尽管我在不同的 Linux 发行版方面有 15 年的经验,但还是很难意识到发生了什么),而且它会不是将文件系统扩展至多个设备。
我始终建议使用持久设备标识符特别在 /etc/fstab 和其他类似的配置点中。在 /dev/disk/by-* 中查找应该有用的符号链接。特别是 /dev/disk/by-id 中的优点是,即使磁盘移动或检测顺序发生变化(这在大型设置中很容易发生!),它们仍保持不变。
第五,确保挂载点目录存在并且为空(ls -A
是您的朋友)。(即使目录不为空,它也可能会工作,但您将要困惑了。)
第六,您可能希望将任何现有文件(位于旧文件系统的相关目录下)移动到新分区。为此,请在新分区上的某个临时位置(/mnt 通常用于此类目的)安装文件系统,移动所有文件,然后从其临时安装点卸载新文件系统。确保在执行此操作之前停止所有相关服务。例如,要将 /srv 中的所有内容迁移到位于 /dev/vdb2 的新文件系统,请尝试以下操作:
# shopt -s dotglob
# cd /srv
# mount /dev/vdb2 /mnt
# mv ./* /mnt
# umount /mnt
第七,执行 amount -a
来挂载 /etc/fstab 中列出的所有文件系统,然后执行mount
或df
来验证新文件系统是否按预期挂载。(它们应该列在输出中,并且df
应该报告它们基本上是空的,除非您像上面的步骤 6 那样将文件移动到它们上面。)之后一切都应该正常,您可以开始使用这些文件系统,但您可能需要再次重新启动系统并验证文件系统是否在启动时挂载以确保万无一失。此时您可能还想使用chmod
在文件系统的根目录上设置适当的权限;例如chmod 775 /srv/www
。