存储介质知识总结

一、磁盘基本知识

1、物理块与逻辑块概念:
physical sector size:一般为512B,现在有4096B的,
logical sector size:physical sector size 变为4096B后,为了兼容512B的,就将一个physical sector划分为8个 logical sector,于是logical诞生了
2 查看IO block 大小
cat /sys/block/sdb/queue/physical_block_size
cat /sys/block/sdb/queue/logical_block_size
cat /sys/block/sdb/queue/optimal_io_size
cat /sys/block/sdb/queue/minimum_io_size
cat /sys/block/sdb/queue/physical_block_size
/sys/block/sda/queue/nr_requests 磁盘队列长度
3、获取block的数量:(ioctl(dev_fd, BLKGETSIZE, &numblocks); //block大小为512 byte per block,numblocks为unsigned long
4、数据安全:
    盘bit翻转:存储介质,磁盘和flash都不能确保数据不会发生单比特错误,所以都有前向纠错能力。至于纠完了还有错,概率上也存在,这就需要进行副本间比对进行找出;若磁盘本身自带校验功能,是否能发现静默损坏?
5、MiB是1024进制 mebibyte,MB是1000进制megabyte;
6、传统硬盘提供的物理接口:
        用于ATA指令系统的IDE接口,直接连在南桥上的 IDE控制器
        用于ATA指令系统的SATA接口
        用于SCSI指令系统的并行SCSI接口,需要专门的SCSI控制器,控制器插在PCI总线;控制器有1~2个通道
        用于SCSI指令系统的串行SCSI(SAS)接口
        IBM的SSA
        FCP
        HBA(Host Bus adapter)主机总线适配器:作用1、不同协议的适配、扩展;2、offload;如网卡、fc卡、raid卡,scsi卡都是HBA
7、接口与速率:

SATA2

SATA3

PCI-E 3.0

NVMe SSD

机械盘

300MB/s

600MB/s

10GB量级

GB量级

700k/200k

R:70us/W:15us

400MB、200k、2ms


二、运维命令:   

1、物理踢盘:echo 1 > /sys/block/sdb/device/delete;
2、识别新添加的 scsi 磁盘:echo "- - -" > /sys/class/scsi_host/host0/scan,“- - -”之间需要有空格,如果还未发现,尝试 host1,host2....
3、一种异常pci设备的方法,模拟移除SSD盘
3.1 用 find /sys/devices/ -name *nvme*找到nvme盘的位置
3.2 移除:echo 1 > /sys/devices/pci0000:00/0000:00:03.1/0000:06:00.0/remove
3.3 恢复:echo 1 > /sys/bus/pci/rescan
4、磁盘只读:echo offline > /sys/block/sdb/device/state, 设置磁盘可用echo runing > /sys/block/sdb/device/state

5、磁盘检测工具:
    badblocks -s//进度  -v//详细情况 -w/以写的方式检测/dev/sda检测硬盘坏块。 例如:badblocks -b 4096 -v  /dev/nvme1n1  通过点灯 定位磁盘,检测坏道
    hdparm 命令get/set SATA/IDE device parameters
                hdparm -t /dev/sda 测试硬盘读速度
                hdparm -T /dev/sda缓存读速度
6、smartctl(self-monitoring analysis and reporting technology)apt-get install smartmontools
            -a 所有信息
            -s on/off 开启或关闭smartctl
            -H 磁盘健康状况
            -l error /dev/sda 查看错误,需要先执行 -t short/long /dev/sda 然后 -l error /dev/sda;
            -l devstat 查看物理电气特性 smartctl -l devstat /dev/sda; 查看寿命指定page 7 :devstat,7 (等效-l ssd /dev/sda)
            -t offline:通过 -l error 查看结果;long/shot:通过 -l selftest 查看结果;如 smartctl -t short /dev/sda
            -i 磁盘基本信息
            smartctl -a -d megaraid,2 /dev/sda 查看raid中的盘,数字表示在控制器上的盘位 
smartctl信息解释:
Media_Wearout_Indicator 剩余寿命
Raw_Read_Error_Rate 底层数据读取错误率,不可以作为盘故障的判断依据
7、查看RAID信息MegaCli64:
    所有信息:/opt/MegaRAID/MegaCli/MegaCli64 -AdpAllInfo -aALL
    错误信息:/opt/MegaRAID/MegaCli/MegaCli64 -PDList -aAll | grep "Error"
   查看raid和组成raid的磁盘:MegaCli64 -LdPdInfo -aALL 或 cat /proc/mdstat
#RAID Level对应关系:
RAID Level : Primary-1, Secondary-0, RAID Level Qualifier-0 RAID 1
RAID Level : Primary-0, Secondary-0, RAID Level Qualifier-0 RAID 0
RAID Level : Primary-5, Secondary-0, RAID Level Qualifier-3 RAID 5
RAID Level : Primary-1, Secondary-3, RAID Level Qualifier-0 RAID 10
Medai Error Count 表示磁盘可能错误,可能是磁盘有坏道,需要更换盘。数值越大,危险系数越高。
Other Error Count含义:是RAID卡内部寄存器记录到硬盘的部分非致命错误,主要包括非法请求和驱动器可能返回的错误,对业务无直接影响。LSI对此解释如下:该类错误如果影响业务,将在系统日志中有硬盘相关的异常日志。
因此,该参数不能作为判断故障的标准,应该以OS日志中的具体信息判断。根据业务是否受影响及硬盘检测情况决定是否更换硬盘。 此类问题可以收集OS日志和RAID卡,看是否有其他异常,若无异常,则不用理会other error提示。

8、性能分析blktrace
    blktrace 跟踪io: blktrace -d /dev/sda -o - | blkparse -i -   利用blktrace分析IO性能 | Linux Performance
9、限速:cgroup
10、分区操作命令:MBR分区表(主引导记录),最大支持2TB;GPT(GUID分区表),支持18EB;每个磁盘最多支持128个分区。
     1 fdisk /dev/sda, m  帮助命令,n 新建分区,d 删除,q退出不保存,w保存退出,p查看分区
     2 parted:特殊的情况,比如大空间fdisk不支持,就需要用parted了,parted支持2T以上分区且允许调整大小;
     parted -s /dev/sda [cmd] 非交互模式
     parted /dev/sda    交互模式
     mklable gpt (设置分区类型为gpt)
     mkpart part-type [fs-type] part-type应该是primary、logical、extended之一,start end (start/end 默认单位是MB),0% 100%表示使用整个盘
     mane  partition name 设置分区名字
     resizepart partition end修改分区的结束位置;
     uint 设置默认单位,省去计算
    Warning: The resulting partition is not properly aligned for best performance
    分区对齐设置,没有实现设备最佳性能。修改方法: (optimal_io_size + alignment_offset)physical_block_size=start位置(加上相应单位),若physical_block_size 为512则加上s,若为4k,需要计算一下开始的具体位置
11、查看盘对应的 pci :ls -l /sys/class/block/
12、lspv显示卷组中的物理卷
13 、找到盘所在HBA的方法:
    找到raid卡或者scsi卡
        root@lll31194:~# lspci -vv | grep "RAID bus controller" -A 30
        04:00.0 RAID bus controller: LSI Logic / Symbios Logic MegaRAID SAS-3 3108 [Invader] (rev 02)
    找到磁盘的 path,如下pci-0000:04:00.0,0000表示host id,04表示raid卡的bus id,后面的00表示channel,再后面的0 表示lun id,
        这说明 sda是连在上面的 raid 卡上的
        root@lll31194:~# ll /dev/disk/by-path
        lrwxrwxrwx 1 root root   9 Mar  6 13:26 pci-0000:04:00.0-scsi-0:2:0:0 -> ../../sda
        参考定位磁盘位置:https://www.tony-yin.site/2018/05/12/Megaraid_Location/
14 dd 命令
dd if=/dev/urandom of=/dev/hda1
seek=N skip N obs-sized blocks at start of output
skip=N skip N ibs-sized blocks at start of input
iflag=direct
oflag=direct
15、磁盘IO调度模式:Kernel/Reference/IOSchedulers - Ubuntu Wiki Ubuntu百科
16、监控开发:udev方式可以监控磁盘插入、拔出事件;


三、性能检测命令

iostat参数说明:
-c 仅显示CPU信息,与-d互斥
-d 仅显示磁盘统计信息,与-c互斥
-k 以k为单位显示每秒磁盘的请求数,默认单位是块
-p device | ALL
与x互斥,用于显示显示块设备及系统分区的统计信息,可以在 -p 后 指定设备名,如 iostat -p hda 或显示所有设备 iostat -p ALL
-t 在输出数据时,打印搜集数据的时间
-V 打印版本号和帮助
-x 输出扩展信息
例:iostat -d 2 6 每2秒显示一次信息,共显示6次
$iostat -x 1
Linux 2.6.33-fukai (fukai-laptop)          _i686_    (2 CPU)
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
5.47    0.50    8.96   48.26    0.00   36.82
Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               6.00   273.00   99.00    7.00  2240.00  2240.00    42.26     1.12   10.57   7.96  84.40
sdb               0.00     4.00    0.00  350.00     0.00  2068.00     5.91     0.55    1.58   0.54  18.80
rrqm/s:          每秒进行 merge 的读操作数目。即 delta(rmerge)/s
wrqm/s:         每秒进行 merge 的写操作数目。即 delta(wmerge)/s
r/s:            每秒完成的读 I/O 设备次数。即 delta(rio)/s
w/s:            每秒完成的写 I/O 设备次数。即 delta(wio)/s
rsec/s:         每秒读扇区数。即 delta(rsect)/s
wsec/s:         每秒写扇区数。即 delta(wsect)/s
rkB/s:          每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。(需要计算)
wkB/s:          每秒写K字节数。是 wsect/s 的一半。(需要计算)
avgrq-sz:       平均每次设备I/O操作的数据大小 (扇区)。delta(rsect+wsect)/delta(rio+wio)
avgqu-sz或aqu-sz:    平均I/O队列长度。即 delta(aveq)/s/1000 (因为aveq的单位为毫秒)。
await:          平均每次设备I/O操作的等待时间 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio)
r_await、w_await 读、写请求处理完成等待时间,包括队列中的等待时间和设备实际处理时间,单位毫秒
svctm:          平均每次设备I/O操作的服务时间 (毫秒)。即 delta(use)/delta(rio+wio)
%util:          一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的。即 delta(use)/s/1000 (因为use的单位为毫秒)
如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。公式:(r/s + w/s)*svctm/1000
idle小于70% IO压力就较大了,一般读取速度有较多的wait。
同时可以结合vmstat 查看查看b参数(等待资源的进程数)和wa参数(IO等待所占用的CPU时间的百分比,高过30%时IO压力高)
2、iotop查看进程IO情况 -p pid , iotop -o 只看有io的进程, -d显示的间隔(秒),-P只显示进程(一般显示线程), -a 线程完成的io总量,默认是秒带宽,按方向键选择排序的列(从大到小排序)
3、util不能代表ssd的饱和度。在SSD测试中,我们经常看到util%=100%,读写压力稍微大一点就到了100%。这是因为SSD通常都是并发IO,多个IO是同时被处理的。但是根据util%的定义公式,IO请求数量乘以每个IO的svctm,每个IO确实都花了svctm的时间,但是他们是同时进行的。公式并没有把并发考虑在内,所以当并发稍微大一些的时候,就显示100%,这时候并不意味着IO出现了瓶颈。
评估饱和度方法:可以把iostat观察到的平均请求队列长度或者读写请求的完成的等待时间与基准测试(比如fio)对比。
4、perf使用
perf trace -t 74770 -o filename 查看指定线程在做什么


四、SSD 知识:

结构 ssd -> Nand flash->die -> plane -> block -> page  -> cell
1、SSD page size是4k对齐,为最小写入单位,SSD block由多个page组成,为最小擦除单位(最小512k)。Flash芯片block必须整体擦除,因为一个block公用一个衬底,加电放电的单位是衬底。
2、判断设备是否为SSD, SSD是非转动磁盘, cat /sys/block/sda/queue/rotational,返回 0, 就是 SSD
3、Nor Flash比Nand读取速度快,但是写入、擦除速度慢很多;成本上nor比nand要贵;
4、2D是平层、3D是楼房;存储单元: SLC 1bit、MLC 2bit、TLC 3bit、QLC 4bit
5、DWPD: drive write per day,行规:5年内每天可以写入的次数。因为写放大,导致SSD的写入次数是小于flash写入次数的
6、读写特性:
    延迟:写入到ssd内部cache就返回,故延迟低。而读一般是从NAND中读取,故延迟高。
    读特性:ssd导致随机比顺序要高。写特性:写比读慢,写会影响寿命。flash无法覆盖写,需要整体擦除,然后写入,所以会引起数据搬迁:地址A映射到ssd地址x,下次再写入时,ssd会找一个新地址y写入,这时x就成为垃圾数据;随机写会导致数据在ssd内部频繁搬迁,写放大严重,降低ssd寿命,降低写性能,所以ssd也更喜欢顺序写入;为了减少写放大带来的性能损耗,提前下发trim指令清理无用数据(但仍旧消耗了寿命)。ATA SCSI盘也有相关命令。 https://en.wikipedia.org/wiki/Trim_(computing)
7、安全擦除数据:trim,发了指令,可能不执行,但是很快呀;Security Erase Format安全可靠,略慢;
8、cat /sys/bus/pci/slots/13-1/power可以执行一下这个命令来看下SSD的上电情况,如果是1就是上电状态.U.2 热插拔问题:需要评估具体的服务器型号、SSD型号、操作系统是否支持热插拔,故需要确认SSD/pcie插槽、操作系统、nvme驱动是否支持。
9、一个cell存储的电子越多,写入的时候进入 浮栅电子的个数控制就要约精确,写耗费的时间越长;读取的时候需要用不同的参考电压去读,加长了读取时间。
10,性能问题排查:
1、执行命令ll /sys/block您按照盘符找到地址
lrwxrwxrwx  1 root root 0 Nov 24 15:54 nvme6n1 -> ../devices/pci0000:3a/0000:3a:00.0/0000:3b:00.0/nvme/nvme6/nvme6n1/
2、lspci -vvvs 加对应的地址,查看LnkSta,
lspci -vvvs 0000:3b:00.0
LnkSta:    Speed 8GT/s, Width x1,  #正常应该为 x4,这里是x1,说明性能是原理的四分之一
11、查看SSD 厂商:
lspci -vmm | grep "Volatile" -A 3, Vendor 1c5f 是Memblaze
12、nvme smart-log  /dev/nvme0n1输出各项释义:
Data Units Read读取扇区计数
该项数值乘以1000后即为读取的扇区(1扇区=512字节)数量统计。
Data Units Write写入扇区计数
该项数值乘以1000后即为写入的扇区(1扇区=512字节)数量统计。
Percentage Used已使用的写入耐久度(百分比显示)
该项显示已产生的写入量占厂商定义总写入寿命的百分比。该项数值为动态显示,计算结果与写入量及固态硬盘的TBW总写入量指标有关。新盘状态下该项目为0%。只要不到100%产品可靠性是保证的,可以结合以往寿命消耗速度和更换卡所需时间,来设置一个阈值。


五、文件系统

1、块是文件系统的最小读取单位,是针对文件系统的,是文件系统(操作系统)的一个抽象,只能基于块访问文件系统。内核对应块大小是必须是扇区大小的2的整数倍(如0/2/4倍),并且小于页面大小,通常每个block 4k,即由8个扇区组成。设备使用的是扇区,设备之上是文件系统,在格式化设备时,最好将文件系统的LBA起始地址和扇区对齐,提高IO性能;
2、查看文件系统blocksize:tune2fs -l /dev/sdj1|grep "Block size:" 或者:stat -f /dir
3、查看文件系统类型:df -T (df - report file system disk space usage)、stat -f /、 blkid或 lsblk -f
4、查看分区信息:fdisk -l
5、查看文件系统错误:tune2fs -l /dev/qbd1 | grep error 
Filesystem state:         clean with errors
First error time:         Wed Jul  1 02:51:07 2020
First error function:     ext4_journal_check_start
First error line #:       61
First error inode #:      0
First error block #:      0
6、查看操作系统的page size:
getconf PAGESIZE
7 文件系统扩容:
resize2fs
Linux下使用fdisk扩大分区容量_chengxuyuanyonghu的博客-CSDN博客_fdisk扩容分区
8、查看空间:
    df (disk free)通过文件系统获取free空间,由于删除文件后空间不会立刻释放,所以可能存在 du+df > disk total
    du (disk usage) 计算每个文件的大小,并求和
        du -sh 查看文件夹下所有文件夹大小
        du -ah --max-depth=1 、du -h -d 1


六、缓存

Write-through- Write is done synchronously both to the cache and to the backing store.
Write-back (or Write-behind) - Writing is done only to the cache. A modified cache block is written back to the store, just before it is replaced.
15.3 Data Integrity Implications of Cache Modes #
cache = writethrough, cache = none, cache=directsync
These are the safest modes, and considered equally safe, given that the guest operating system is “modern and well behaved”, which means that it uses flushes as needed. If you have a suspect guest, use writethough, or directsync. Note that some file systems are not compatible with cache=none or cache=directsync, as they do not support O_DIRECT, which these cache modes relies on.


七、数据恢复:

testdisk

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值