磁盘告警之---神奇的魔法(Sparse file)
一、问题来源



二、出现的问题
[root@ip-XXXXXXXX data]# ls -lh test.dat
-rw------- root root 60G Sep : test.dat
[root@ip-XXXXXXXX data]# du -sh test.dat
.4G test.dat
三、排查过程
[root@ip---- data]# du -h --apparent-size test.dat
60G test.dat
四、Sparse file
既然找到问题了,就得好好看看这是个啥东西,看了之后第一反应就是这个文件预分配了60G,但实际上只使用了4.4G...,蒽~~,就这么个意思......
1、定义

2、其他使用场景


dd of=sparse-file bs=7M seek= count= # 相当于创建一个7G的空文件,不占磁盘上的存储数据
或者
truncate -s 7G lile # 相当于创建一个7G的空文件,不占磁盘上的存储数据
4、测试
# 可以看到/run目录下是7.7G
[root@master run]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/nvme0n1p2 200G .0G 195G % /
devtmpfs .7G .7G % /dev
tmpfs .7G .7G % /dev/shm
tmpfs .7G 428K .7G % /run
tmpfs .7G .7G % /sys/fs/cgroup
tmpfs .6G .6G % /run/user/ # 创建一个7G的sparse file
[root@master run]# truncate -s 7G lile [root@master run]# ls -lh lile
-rw-r--r-- root root .0G Sep : lile # lile这个文件只是一个空的文件,不占存储空间
[root@master run]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/nvme0n1p2 200G .0G 195G % /
devtmpfs .7G .7G % /dev
tmpfs .7G .7G % /dev/shm
tmpfs .7G 428K .7G % /run
tmpfs .7G .7G % /sys/fs/cgroup
tmpfs .6G .6G % /run/user/ # 使用dd创建一个大小为7G的普通文件
[root@master run]# dd if=/dev/zero of=output bs=1G count=
+ records in
+ records out
bytes (7.5 GB) copied, 3.5524 s, 2.1 GB/s # 可以看到是成功的,这就说明sparse文件预分配的大小不影响磁盘存储空间,不影响其他文件使用存储空间
[root@master run]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/nvme0n1p2 200G .0G 195G % /
devtmpfs .7G .7G % /dev
tmpfs .7G .7G % /dev/shm
tmpfs .7G .1G 704M % /run
tmpfs .7G .7G % /sys/fs/cgroup
tmpfs .6G .6G % /run/user/
5、总结及注意
1)Sparse files并不占用磁盘存储空间
2)平时我们使用ls -lh查看文件大小、find / -size +1G 找出来的日志大小并不一定准确,尽量再一遍使用du -sh确认
3)ls命令和du命令在一定程度上可以这样表示

五、其他
1、本想看一下跟sparse file相关的unix系统方面的,但是感觉自己知识点不太足,有点难度....
磁盘告警之---神奇的魔法(Sparse file)的更多相关文章
- 第17章 内存映射文件(3)_稀疏文件(Sparse File)
17.8 稀疏调拨的内存映射文件 17.8.1 稀疏文件简介 (1)稀疏文件(Sparse File):指的是文件中出现大量的0数据,这些数据对我们用处不大,但是却一样的占用空间.NTFS文件系统对此 ...
- SQL Server ->> Sparse File(稀疏文件)
Sparse File(稀疏文件)不是SQL Server的特性.它属于Windows的NTFS文件系统的一个特性.如果某个大文件中的数据包含着大量“0数据”(这个应该从二进制上看),这样的文件就可以 ...
- Linux 磁盘告警分析
硬件配置 cat /etc/redhat-release && dmidecode -s system-product-name && cat /proc/cpuinf ...
- 转 由一次磁盘告警引发的血案:du 和 ls 的区别
如果你完全不明白或者完全明白图片含义, 那么你不用继续往下看了. 否则, 这篇文章也许正是你需要的. 背景 确切地说,不是收到的自动告警短信或者邮件告诉我某机器上的磁盘满了,而是某同学人肉发现该机器写 ...
- 用windows自带的fsutil来创建1G稀疏文件(sparse file)
fsutils file createnew a.dat 1073741824 fsutil sparse setflag a.dat fsutil sparse setrange a.dat 0 ...
- 基于【磁盘】操作的IO接口:File
基本操作Api import org.apache.commons.lang3.time.DateFormatUtils; import java.io.*; import java.util.Dat ...
- 神奇的魔法数字0x61c88647
来源JDK源码,产生的数字分布很均匀 用法代码如下. # -*- coding: utf-8 -*- HASH_INCREMENT = 0x61c88647 def magic_hash(n): fo ...
- KVM虚拟化技术(六)磁盘管理
KVM支持的虚拟磁盘类型 raw 这并非是一种真正的磁盘格式,而是代表虚拟机所使用的原始镜像:它并不存储元数据,因此可以作为保证虚拟机兼容性的候选方案,然而也正因为 它不存储元数据,因此不能支持某些高 ...
- Python监控SQL Server数据库服务器磁盘使用情况
本篇博客总结一下Python采集SQL Server数据库服务器的磁盘使用信息,其实这里也是根据需求不断推进演化的一个历程,我们监控服务器的磁盘走了大概这样一个历程: 1:使用SQL Server作业 ...
随机推荐
- Spring入门(九):运行时值注入
Spring提供了2种方式在运行时注入值: 属性占位符(Property placeholder) Spring表达式语言(SpEL) 1. 属性占位符 1.1 注入外部的值 1.1.1 使用Envi ...
- c#自定义控件中的事件处理
using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; u ...
- Netbeans courier new 乱码问题
Netbeans 默认的字体 monospaced,显示英文的单引号及字体非常的不好看,在网上查了下资料可以变得很好看. 1.仍然保持默认字体 monospaced 2.在Netbeans 的安装目 ...
- Kendo-Grid for Vue API and Template
写此博客的原因:在做项目时前端用的vue,后端用的jfinal.在前端veu中调用了kendo grid插件,但是在官方文档中对kendo grid for vue 的api和template都不太详 ...
- 【redis】redis基础命令学习集合
写在前面 Redis是一个高速的内存数据库,它的应用十分广泛,可以说是服务端必学必精的东西.然而,学以致用,无用则无为.学了的东西必须反复的去用,去实践,方能有真知.这篇文章记录了我在redis学习过 ...
- docker学习1:docker前世今生
Docker简介 Docker是2013发起的一个项目,早在2013年,Docker自诞生起,就是整个技术界的明星项目,当时我还在上海实习,就在各种技术媒体上看到了Docker的介绍文章,很多技术媒体 ...
- .net core 实现 api网关 进行 api版本控制
场景: 由一次大的项目改动引起的app端api不兼容问题,这时候就需要对api做版本控制了,权衡之后因为用户不多,选择了强更,没人想在已经写了8000行代码的单个svc文件中维护好几个版本的接口或者继 ...
- 启xin宝app的token算法破解——逆向篇(二)
启xin宝app的token算法破解--抓包分析篇(一)文章已经对该app进行了抓包分析,现在继续对它进行逆向. 对于一个app而言,我们要逆向app,需要知道什么呢? 逆向工具 Java基础,甚至c ...
- python 17 内置模块
目录 1. 序列化模块 1.1 json 模块 1.2 pickle 模块 2. os 模块 3. sys 模块 4. hashlib 加密.摘要 4.1 加密 4.2 加盐 4.3 文件一致性校验 ...
- switch语句(上)(转载)
switch语句是C#中常用的跳转语句,可以根据一个参数的不同取值执行不同的代码.switch语句可以具备多个分支,也就是说,根据参数的N种取值,可以跳转到N个代码段去运行.这不同于if语句,一条单独 ...