Linux系统中创建大文件,并作为文件系统使用
在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命令可以看到文件中间是用“\0”填充的。
truncate -s 10G /home/disk000
-s:指定文件的大小
2,将第一步中得到的大文件进行格式化并挂载到文件系统
由上述可知,如果所要分配的文件大小不大,比如2G以下,我们可以优选dd命令,当文件大小非常大时,就可以使用fallocate了,由于truncate命令生成的文件并不是看起
来那么大,如果非必要,我们还是尽量不选它。
比如我们使用dd或者fallocate创建一个1G大小的文件:
dd -if=/dev/zero of=/home/disk00 bs=1024 count=1000000
fallocate -l 1G /home/disk00
2.1 扩展一般的文件系统空间
2.1.1 格式化
以格式化为ext4文件系统为例
mkfs.ext4 /home/disk00 ----执行该命令后,系统会提示“disk00 is not a block special device”,直接输入“y”确认继续就行。
2.1.2 挂载到文件系统
由于disk00并不是一个block device,所以挂载到文件系统时并不能像普通磁盘分区、格式化后那样直接挂在,我们需要用到loop伪设备。在执行loop挂载前,我们需要
确认系统中有哪些loopback设备,并且那些是已经被使用的。
确认系统中有那些loopback设备:
ls -l /dev/loop*
确认那些loopback是已经被使用的:
cat /proc/mount
确认上述两个事项后,就可以执行如下挂在命令:
mount -o loop=/dev/loop0 /home/disk00 /opt/backup_DB
-o loop=:使用 loop 模式用来将一个档案当成硬盘分割挂上系统
2.1.3 将挂载关系写入/etc/fstab,防止系统重启后挂载关系丢失。
echo "/home/disk00 /opt/backup_DB ext4 defaults,loop 0 0" >> /etc/fstab
2.2 挂载交换分区
2.2.1 格式化,将其变成一个swap文件
mkswap /home/disk00
2.2.2 启用这个swap文件
swapon /home/disk00
2.2.3 写入/etc/fstab,在系统重启时能够自动挂载
echo "/home/disk00 swap swap defaults 0 0" >> /etc/fstab
3,操作实例
下面以我一个项目中的实际操作为例进行说明:
我们的MySQL数据库安装在/home分区下,该分区大小为3.5T,由于我们没有外挂磁阵,也没有独立的备份服务器,所以只能将数据库的备份存放在本地,遵循备份和原始
数据不能放在同一分区,我们把备份放在了/opt分区,该分区大小为50G。我们库目前大小为12G,每天产生的数据量为350-400M之间,每两周数据总量大致增加1G。备份策
略是每周一全备,然后周二到周日都是基于周一的全备进行增量(这样的目的是恢复时方便)。备份的保留策略是全备保留3周,之前的全备进行删除;每周的增量在下一周一
全备前打包压缩转移到/home/old_DB_backup下。由于数据量不断增多,大概到每周的周六时/opt的占用量就已经达到接近90%了,所以我们考虑将/opt下暂时存放增量备份的
目录进行单独挂载一个分区进行扩容,减轻/opt分区的空间压力,方案操作如下:
3.1 由于/home分区的目录非常大,所以选取/home分区做为分割对象。考虑到后续数据量增加,给予30G空间扩展:
fallocate -l 30G /home/old_DB_backup/backup_disk/disk0_in
3.2 我们的文件系统为ext4,所以将改数据文件格式化为ext4
mkfs.ext4 /home/old_DB_backup/backup_disk/disk0_in
3.3 挂载到待增加独立空间的增量备份目录
mount -o loop=/dev/loop0 /home/old_DB_backup/backup_disk/disk0_in /opt/DB_backup/incremental_backup
3.4 挂载关系写入/etc/fstab
echo "/home/old_DB_backup/backup_disk/disk0_in /opt/DB_backup/incremental_backup ext4 defaults,loop, 0 0" >> /etc/fstab
Linux系统中创建大文件,并作为文件系统使用的更多相关文章
- 在linux/unix中查找大文件
在linux/unix中查找大文件,如查找大于100M文件的位置路径,查找等于10M文件的位置路径等等,下面就介绍几个实现快速查找的命令: 1. 查找指定目录下所有大于100M的文件,命令为 find ...
- 在Linux系统中如何把文件拷贝到U盘
Linux下把所有的都当成文件处理,如果在linux系统下需要拷贝文件,哪么你需要先把U盘挂载到系统中的某一个位置,然后再使用cp命令完成拷贝. 工具/原料 Linux操作系统一台 U盘一枚 方法 ...
- Linux培训教程 linux系统下分割大文件的方法
在linux中分割大文件,比如一个5gb日志文件,需要把它分成多个小文件,分割后以利于普通的文本编辑器读取. 有时,需要传输20gb的大文件,Linux培训 教程件到另一台服务器,也需要把它分割成多个 ...
- linux 系统中的特殊文件
特殊文件是UNIX系统中最具特色的文件特性之一.特殊文件也称设备文件.提供用户访问外部设备,而不必知道各种设备的具体操作.UNIX利用特殊文件作为用户与设备文件的接口,使用户能像访问普通文件那样访问特 ...
- Linux系统中用户组、文件权限浅解
用户组 在linux中的每个用户必须属于一个组,不能独立于组外.在Linux中每个文件有所有者.所在组.其它组的概念. [所有者] 一般为文件的创建者,谁创建了该文件,就天然的成为该文件的所有者,用& ...
- 在Linux系统中创建SSH服务器别名
如果你经常通过 SSH 访问许多不同的远程系统,这个技巧将为你节省一些时间.你可以通过 SSH 为频繁访问的系统创建 SSH 别名,这样你就不必记住所有不同的用户名.主机名.SSH 端口号和 IP 地 ...
- linux系统中批量查找文件与文件内容的方法
在linux中查看与修改文件权限我们都必须使用命令来操作,不能像windows一样点几下就好了,下面我们简单的介绍一下linux中的相关命令 比如查找当前目录下面所有的php文件里面某个关键字 fin ...
- Linux系统中stat查看文件的相关时间
目录 对于文件来说 对于目录来说 利用touch命令修改时间 在Linux下,对于一个文件有很多个时间戳属性,文件的创建时间,文件的修改时间,文件的读取时间.我们用stat来查看文件的相关时间属性. ...
- linux系统中不同颜色的文件夹及根目录介绍
文件颜色的代表含义: 蓝色:目录 绿色:可执行文件 红色:压缩文件 蓝绿色:链接文件 灰色:其他文件 黄色:设备文件,其中包括block,char,fifo. 白色:表示普通文件 红色闪烁:表示链 ...
随机推荐
- 转Serial,Parallel,CMS,G1四大GC收集器特点小结
转 https://blog.csdn.net/u013812939/article/details/48782343 1.Serial收集器 一个单线程的收集器,在进行垃圾收集时候,必须暂停其他所有 ...
- 1.Linux安装redis
Linux安装redis 操作系统是Centos7 1.下载压缩包 2.解压 3.编译 4.启动redis 5.设置redis.conf和防火墙端口开放,外网可以访问 1.下载压缩包 下载地址:htt ...
- web框架之初识Django
目录 一.web框架 1.1什么是web框架 1.2自制的简易web框架 1.3三大主流web框架简介 Django Flask Tornado 1.4动态网页与静态网页 二.初识Django框架 2 ...
- hdu 6152 : Friend-Graph (2017 CCPC网络赛 1003)
题目链接 裸的结论题.百度 Ramsey定理.刚学过之后以为在哪也不会用到23333333333,没想到今天网络赛居然出了.顺利在题面更改前A掉~~~(我觉得要不是我开机慢+编译慢+中间暂时死机,我还 ...
- 对webpack的初步研究5
Loaders 加载器是应用于模块源代码的转换.它们允许您在处理import或“加载” 文件时预处理文件.因此,加载器有点像其他构建工具中的“任务”,并提供了处理前端构建步骤的强大方法.加载器可以将文 ...
- vue框架搭建--axios使用
前后端数据交互作为项目最基础需求(静态的除外),同时也是项目中最重要的需求. 本文重点介绍axios如何配合vue搭建项目框架,而axios的详细使用介绍请移步使用说明 1.安装 cnpm insta ...
- vim 批量添加删除注释
vim中单行注释只是多行注释的一个特例,这里统一进行多行注释的讲解 (1)添加批量注释 ctrl+v 进入列编辑模式,向下或向上移动光标,把需要注释的行的开头标记起来,然后按大写的I(shift+i) ...
- ASP 转换HTML特殊字符
Function HtmlDecode(ByVal s) If Has(s) Then s = regReplace(s, "<br\s*/?\s*>", vbCrLf ...
- php输出控制函数和输出函数生成静态页面
Output Control 函数详解: flush - 刷新输出缓冲 ob_clean - 清空输出缓冲区 ob_end_clean - 清空缓冲区并关闭输出缓冲 ob_end_flush - 冲刷 ...
- sql语句insert into where 错误解析
sql语句中,insert into 代表得是插入一条新得数据,全新得数据,所以你这样得写法是错误得,比如: "insert into klkl_Service_shop(name_real ...