这篇文章,当时只是对分区扩容的记录。当时技术水平有限,虽然文章内容没什么问题,但今天看来,有必要对其进行更新。
一、原始文章:使用Gparted软件扩容
1.1 下载安装GParted
sudo apt-get install gparted
安装后如图所示:
双击打开软件瞅瞅(需要输入密码):
- 我的Linux根目录在sda4
- sda4右边有个钥匙,表示我现在不能对他进行操作
- 下图中:sda4后面就是sda6了,因为我已经把中间的sda5合并给sda4了。即我原来根目录磁盘大小只有30G 左右,增加之后变成了85G 左右。
扩容要求1:只能将待扩容磁盘相邻的空间扩容给他
。如下图:我还可以将sda9前后的空间扩展给他。扩容要求2:被扩容的磁盘的状态要为未分配(如下图)
,操作方式是:在该磁盘上右键、删除、点击菜单栏的绿色对号执行操作。
1.2 U盘启动Ubuntu扩容
-
用U盘启动Ubuntu系统,进去之后点击试用系统。
-
同样打开上面的这个软件(没有的话安装一下就行了)。
-
在根目录磁盘上右键“调整大小”(可能是英文的注意一下)
-
将磁盘边界向扩容方向拉就行了(就是下图绿色的那个框框)
-
点击调整大小
-
点击菜单栏绿色对号,确定执行更改
。 -
关机,拔出U盘。
-
像往常一样启动Ubuntu
1.3 注
- 没有钥匙图标的磁盘直接就可以扩容,不用试用U盘。
- 扩容的概念大概就是:用另一个系统更改目标系统磁盘大小,因为一个磁盘在运行过程中可能不能执行磁盘大小的更改。同样的,在windows系统中应该也能对Ubuntu根目录磁盘大小进行扩容(猜测,暂时没有实践过)。
二、更新内容
2.1 Linux 分区、目录 的概念
2.11 从Windows说起
你买了一台电脑,电脑里面有一个固态硬盘(SSD)、内存条(RAM)还有ROM。
- 电脑的
ROM
(Read-Only Memory,只读存储器)里面存放了一些不可修改的数据和程序,它们在电脑断电后也不会丢失。ROM一般用于存放计算机的基本程序和数据,如BIOS
ROM。BIOS ROM是一种固件,它存放了计算机的硬件信息和启动程序,当计算机开机时,它会执行BIOS ROM中的程序,检测硬件设备,加载操作系统。 - 而磁盘,则存放了你的系统、软件、数据等内容,现在电脑的磁盘都是SSD了,同样的,你断电后,这些数据也不会消失。
- 内存条:在你运行软件(首先是操作系统)的时候起作用,它是CPU和磁盘上的数据交换的高速通道。
ROM我们不用管,而内存觉得小则可以换个大的。
只有磁盘,使我们可以自主操作的部分。
一块SSD可能容量是1TB,这些存储区域在物理上是连接在一起的整块区域。但我们可以在逻辑上,把这块硬盘换分为多个区域,每个区域可以有不同的属性,比如不同的文件系统类型(不同的文件系统类型有不同的特点,比如支持的最大文件的大小,是否支持权限管理等等)。
分区之后我们可以更加灵活管理数据,比如用一个分区来安装操作系统,一个分区来安装字节下载的软件,一个分区来存放文稿数据等等。
下图是我电脑在Windows下的可见分区:
严格来说,应该成为“卷”,当然了,通常情况下可以将它和分区看成是一个概念,我们暂且用分区这个词来描述。当分区的文件系统是NTFS时,才会在上上面的资源管理器中显示,我还有一个用来安装Ubuntu的分区,文件系统是ETX4,就不会在这里显示。
Windows下的分区通俗易懂。但是到了Linux,可能就会产生疑惑。
Windows下的一个目录可能是这样的:E:\ST\STM32CubeIDE_1.13.0
,而到了Linux,则变成了:/root/LinuxC/Algorithm
,所有的绝对目录,都是以/
开头的。
2.12 Linux分区的概念
Linux 根目录:/
-
Linux的根目录是文件系统目录结构的顶层,是最顶层的目录,所有的文件和目录都置于根目录“/”之下。
-
根目录是Linux系统启动时系统第一个载入的分区,所以启动过程中用到的文件应该都放在这个分区中; 其中/etc、/bin、/dev、/lib、/sbin这5个子目录都应该要与根目录连在一起,不可独立成为某个分区。
根目录所在的分区称为根分区(或者启动分区),它是你的固态硬盘上多个分区中的一个。可以在概念上将它理解为Windows的系统盘,但并不完全一样。
Linux多分区与挂载:
和Windows类似,Linux也可以有多个分区,以便提升数据安全性、效率、支持多文件系统、支持多用户等等。
Linux至少应该有2个分区:
- / 分区:这是根分区,存放了Linux系统的核心文件和应用程序,是必须要有的分区。2
- /boot 分区:这是启动分区,存放了启动程序和内核映像,一般大小为200~500M。这个分区可以单独设置为只读模式,提高安全性
当然了,Linux分区往往不止上面这2个,常用的还有:
- /swap:这是交换分区,用于在内存不足时作为虚拟内存使用,一般大小为物理内存的1~2倍。这个分区可以提高系统的性能和稳定性。
- /home分区:用户分区,存放用户的个人文件和设置的分区。
这些分区都是SSD上的一块一块的存储区域,它们可以在物理上挨着,也可以不挨着。
为了便于管理,可以通过挂载操作,将这些七七八八的分区统一组织起来。
一个分区,可以自行创建多个目录。根分区的顶级目录是/
,即根目录,它也是整个Linux系统目录结构的顶级目录。其他分区,通常可以挂载到根目录下的任意目录下,比如直接挂载到/
下,或者挂载到/root/
下,都是可以的。
挂载只是将分区与目录结构(目录树)进行关联,形成一个逻辑上的、有序的结构,这使得所有的绝对路径都是从根目录开始,而不是从某个分区开始(比如C盘、D盘),方便我们定位和访问文件。
2.2 Linux 分区为什么要扩容
说到这里,你明白你为什么要扩容了吗?仅仅是系统提示你内存不足吗?你为什么需要对根目录(根分区)进行扩容呢?
如上所言,根分区是Linux操作系统所在的分区。按理说不需要太大的空间,问题出在:
- 安装软件:一般使用apt(Debian类)命令安装软件时,会默认安装在根分区,而经验不足的Linux使用者意识不到这个问题,或者不会修改软件的默认安装位置,或者嫌麻烦(比如我),索性还不如扩容呢。
- 文稿与数据的存放:如果系统的分区不清楚,平常可能随便创建的目录来存放各种文件。结果文件全都存放在根分区,最终导致空间不足。
2.3 Linux 扩容策略
如果你不想管那么多,那么就用我原来讲的Gparted,对根分区进行扩容就完事了。
如果你无法使用前面的方法扩容(可能是不满足一些条件),那么可以试试下面的策略。
(1)修改软件的默认安装位置
如果你有其他分区,可以考虑把软件安装到这里,而不是占用根分区。
使用 apt.conf
文件来设置 Dir 参数,指定软件包的根目录。例如,如果你想将软件包安装到 /opt 目录下,可以在 /etc/apt/apt.conf
文件中添加以下内容:
Dir "/opt";
(2)挂载新的分区
如果你的所有分区都空间不足,可以挂载一个新的分区,来存放数据。这个新的分区,不需要满足Gparted扩容的那些条件,应为这不是给根分区扩容,只是给你的Linux文件系统添加了一个新的存储位置。
假设你有一个不使用的分区,它原来没有被挂载到Linux,它可能位于SSD的任意位置。
可以把原来某个分区格式化,然后挂载,参考步骤:
-
首先,确定要格式化和挂载的分区的设备名,例如 /dev/vdb1。使用 fdisk -l 或 lsblk -f 命令查看当前的磁盘和分区情况。
比如:这是我的服务器的磁盘列表,有两块磁盘vda和vdb,都被分为了2个分区,我之前已经挂载了,所以最右边显示的有挂载点。
注意这里不是完整的磁盘名称,可以使用:fdisk -l
来查看,比如下图有一个磁盘为:/dev/vdb,它的一个分区是:/dev/vdb1。
-
然后,使用 umount /dev/vdb2 命令卸载该分区,如果它已经被挂载了。如果它没有被挂载,可以跳过这一步。
如图,现在已经不显示挂载点了:
-
接着,使用 mkfs -t ext4 /dev/vdb2 命令对该分区进行格式化。可以选择不同的文件系统类型,如 ext4,xfs,ntfs 等。这里以 ext4 为例。注意,这一步会删除该分区上的所有数据,所以请在执行之前做好备份。
-
然后,使用 mkdir /root/data/new 命令创建一个挂载点(就是新建个目录)。可以选择任意一个空的目录作为挂载点,这里以 /root/data/new 为例。
-
接着,使用 mount /dev/vdb2 /root/data/new 命令将该分区挂载到挂载点。可以使用 df -h 或 lsblk -f 命令查看挂载是否成功。
-
最后,如果想让该分区在每次开机时自动挂载,使用 vim /etc/fstab 命令编辑 /etc/fstab 文件,添加一行类似于以下的内容:
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /root/data/new ext4 defaults 0 0
其中,UUID 是该分区的唯一标识符,可以用 blkid /dev/vdb2 命令查看,前面的fdisk命令也显示了; /root/data/new
是挂载点;ext4 是文件系统类型;defaults 是挂载选项;最后两个数字是用于备份和检查的标志。
重启后: