在LInux系统的使用过程中,有时候会遇到诸如某个磁盘分区的大小不够用了,导致其下的文件系统不能正常写入数据。亦或者是系统swap分区太小,不够用或者不满足条件而导致的其他一系列问题。如果我们系统上挂载的有富余的磁盘空间,这样就简单多了,直接在现成的磁盘上划出一个分区,格式化并挂载就完事了。但是也有些时候限于条件,没有富余的磁盘空间,怎么办的呢?我们可以在现有的系统中,看看有没有其他分区的空间比较大,并且分出去一部分后,仍然不影响改分区系统的正常使用。如果存在这种情况,就可以实现间接的扩展磁盘空间了。
1,我们需要先在有富余空间的磁盘分区上创建一个大文件,文件的大小根据你的实际需要和所要划出空间分区实际大小来决定。创建大文件,可以使用如下3个命令:
1.1 dd
创建大文件首选的会是dd命令,dd是 device driver 的缩写,可以用来读取设备、文件中的内容,并原封不动地复制到指定位置。因此dd本质上是copy一个文件副本,
它强制你编写每个数据块,并初始化文件内容,但是初始化会占用大量的I / O时间,因此使用dd命令创建大文件的速度是比较缓慢的。使用dd创建大文件的命令如下:
dd if=/dev/zero of=/home/disk0 bs=2G count=1
这个命令将在/home根目录下创建一个名为disk0的空文件,其中用到了如下四个选项:
if=文件名:指定输入文件名或者设备名,如果省略“if=文件名”,则表示从标准输入读取。
of=文件名:指定输出文件名或者设备名,如果省略“of=文件名”,则表示写到标准输出。
bs:指定单个文件的块block大小。
count:想要创建文件的个数。
1.2 fallocate
fallocate的功能是为文件预分配物理空间,而不是生成一个空洞文件,fallocate分配的空间在磁盘的扇区上是连续的,它减少后续写入和读取文件时的磁盘寻道开销;
并且是迅速直接占用空间,而不是想空洞文件那样“假装”战=占有那么多空间,这样就可以保证随着磁盘空间的使用,而不会出现该段磁盘空间不足。由于fallocate
并不是标准的posix接口,并不是所有的文件系统都是支持的,目前主流的ext4和xfs都是可以的。
fallocate -l 20G /home/disk00
-l:--length,指定分配文件的长度,即文件的大小;
disk00:所分配文件名称
1.3 truncate
truncate和lseek是将文件的末尾位置“扩展到”一个固定位置而生成的一个空洞文件,也即是稀疏文件。该文件并不占用实际磁盘空间,只是逻辑上看起来那么大而已。
使用ls -l命令可以查看其逻辑大小,即你希望分配的大小。使用du命令可以看到其实际占用的磁盘空间大小。使用od -c命令可以看到文件中间是用“