--作者:飞翔的小胖猪

--创建时间:2021年3月9日

6.1 概述

在私有云和虚拟化环境中业务方经常会根据自己的业务情况申请磁盘用作数据存储用。如果申请了磁盘但没有使用的情况,将极大的造成资源的浪费。

平台管理员需要及时识别并回收该类磁盘,以节约存储资源。文档只针对于linux操作系统进行说明。

6.1.1 难点

部分业务单位在使用磁盘不会对磁盘进行分区格式化操作,直接使用裸磁盘进行操作。回收的难点在于如何识别裸磁盘是否在使用。类似于oralce数据库的asm跳过文件系统直接使用磁盘。

6.1.2 步骤

具体操作主要通过如下几个步骤实现:

  1. 查找到系统中未分区及格式化的磁盘。重点在于未格式化的磁盘。

  2. 使用iostat命令

  3. 使用fdisk 命令查看块情况

  4. 查看二进制文件

6.1.3 环境说明

操作系统:CentOS Linux release 8.1.1911 (Core)

磁盘规划:

磁盘大小 磁盘名 描述
5G /dev/sdb 未分区,已经格式化。
10G /dev/sdc 未分区,未格式化,有数据。
15G /dev/sdd 未分区,未格式化,没有数据

6.2 具体操作

6.2.1 区分未分区磁盘

1.登录到操作系统中使用lsblk命令查看当前系统中的磁盘信息。

  1. [root@136-b ~]# lsblk
  2. NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
  3. sda 8:0 0 60G 0 disk
  4. ├─sda1 8:1 0 1G 0 part /boot
  5. └─sda2 8:2 0 59G 0 part
  6. ├─cl-root 253:0 0 37G 0 lvm /
  7. ├─cl-swap 253:1 0 4G 0 lvm [SWAP]
  8. └─cl-home 253:2 0 18.1G 0 lvm /home
  9. sdb 8:16 0 5G 0 disk
  10. sdc 8:32 0 10G 0 disk
  11. sdd 8:48 0 15G 0 disk

结论:此处的sdb、sdc、sdd三张磁盘没有分区,同时磁盘后没有跟挂载点。说明这三张盘没有挂载,但不确定是否使用。

2.使用blkid命令查看格式化情况。

  1. [root@136-b ~]# blkid
  2. /dev/sdb: UUID="e2673e77-6362-475f-9b7c-68f00d965d0b" TYPE="ext4"
  3. /dev/sda1: UUID="ed221b0b-feb7-4c6d-86e6-397ee5a56a26" TYPE="ext4" PARTUUID="471c2506-01"
  4. /dev/sda2: UUID="wepdLR-HPdh-rGbf-6Ad5-3uYY-C0DE-Jnj8yR" TYPE="LVM2_member" PARTUUID="471c2506-02"
  5. /dev/sr0: UUID="2020-01-03-21-42-40-00" LABEL="CentOS-8-1-1911-x86_64-dvd" TYPE="iso9660" PTUUID="087a73cc" PTTYPE="dos"
  6. /dev/mapper/cl-root: UUID="4686504e-2cbe-4eef-bd10-35462d76aecf" TYPE="xfs"
  7. /dev/mapper/cl-swap: UUID="333af461-2d09-4c67-aabe-ea169069f158" TYPE="swap"
  8. /dev/mapper/cl-home: UUID="2bf76b9d-f87e-4d0f-afa9-c3054bce43bb" TYPE="xfs"

结论:通过blkid命令得知sdb、sdc、sdd三张盘中只有/dev/sdb进行了分区。/dev/sdc、/dev/sdd磁盘没有进行分区。

通过lsblk和blkid两个命令得知磁盘/dev/sdb进行了分区,同时没有进行挂载此时可以确定/dev/sdb没有使用。可以对/dev/sdb磁盘进行回收。在回收前可以新建一个目录临时挂载确认该磁盘是否有数据,如果有数据则联系业务方询问情况,按回复进行操作。

6.2.2 查看磁盘是否有流量

使用iostat -dxc 1命令实时展示当前磁盘流量,至少观察2分钟以上。第一行可以不用管第一行是每个磁盘至开机以来的均值。

  1. [root@136-b ~]# iostat -dxc 1 | egrep '^sd[b-d]'
  2. sdb 0.21 0.10 5.11 45.82 0.00 11.36 0.00 99.13 0.13 0.52 0.00 24.27 458.23 0.20 0.01
  3. sdc 0.14 0.00 3.67 0.00 0.00 0.00 0.00 0.00 0.03 0.00 0.00 26.78 0.00 0.13 0.00
  4. sdd 0.14 0.00 3.67 0.00 0.00 0.00 0.00 0.00 0.04 0.00 0.00 26.78 0.00 0.13 0.00
  5.  
  6. sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
  7. sdc 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
  8. sdd 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
  9.  
  10. sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
  11. sdc 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
  12. sdd 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
  13.  
  14. sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
  15. sdc 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
  16. sdd 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
  17.  
  18. sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
  19. sdc 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
  20. sdd 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
  21.  
  22. sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
  23. sdc 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
  24. sdd 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

结论:此处可以看到sdb sdc sdd 三张磁盘的实时流量均为0。运维人员可以多观察一段时间,以保证当前非业务闲时。如果多次长时间确认均未有数据则表示磁盘没有数据读写,初步判断磁盘未作为裸磁盘使用。

6.2.3 查看磁盘块情况

使用fdisk命令查看磁盘的是否有数据。使用fdisk 磁盘路径命令操作磁盘。在Command (m for help): 处输入x,然后在Expert command (m for help):处先输入p查看磁盘分区情况。然后使用d从设备中打印第一个扇区的原始数据。

fdisk 命令的 x 模式比较高危,谨慎使用。

/dev/sdc

  1. [root@136-b ~]# fdisk /dev/sdc
  2. Welcome to fdisk (util-linux 2.32.1).
  3. .................
  4. Created a new DOS disklabel with disk identifier 0x3dffbe5c.
  5.  
  6. Command (m for help): x
  7.  
  8. Expert command (m for help): p
  9. Disk /dev/sdc: 10 GiB, 10737418240 bytes, 20971520 sectors
  10. Units: sectors of 1 * 512 = 512 bytes
  11. Sector size (logical/physical): 512 bytes / 512 bytes
  12. I/O size (minimum/optimal): 512 bytes / 512 bytes
  13. Disklabel type: dos
  14. Disk identifier: 0x3dffbe5c
  15.  
  16. Expert command (m for help): d
  17.  
  18. First sector: offset = 0, size = 512 bytes.
  19. 00000000 74 65 73 74 31 31 31 31 31 31 31 31 31 0a 00 00
  20. 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

结论:/dev/sdc不存在分区,同时第一个扇区存在原始数据,判断/dev/sdc存在数据。/dev/sdc可能还在使用,此时需要和业务方沟通确认具体情况。

/dev/sdd

  1. [root@136-b ~]# fdisk /dev/sdd
  2. Welcome to fdisk (util-linux 2.32.1).
  3. ...................
  4. Created a new DOS disklabel with disk identifier 0x2a454cf2.
  5.  
  6. Command (m for help): x
  7.  
  8. Expert command (m for help): p
  9. Disk /dev/sdd: 15 GiB, 16106127360 bytes, 31457280 sectors
  10. Units: sectors of 1 * 512 = 512 bytes
  11. Sector size (logical/physical): 512 bytes / 512 bytes
  12. I/O size (minimum/optimal): 512 bytes / 512 bytes
  13. Disklabel type: dos
  14. Disk identifier: 0x2a454cf2
  15.  
  16. Expert command (m for help): d
  17.  
  18. First sector: offset = 0, size = 512 bytes.
  19. 00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

结论:/dev/sdd不存在分区,同时第一个扇区没有原始数据,结合之前的lsblkblkid命令的结果判断/dev/sdd没有数据。

6.2.4 导出磁盘二进制文件

使用xxd命令以二进制文件查看磁盘文件,一般查看1000行就行了。我们只对/dev/sdc和/dev/sdd说明。

最终命令:

  1. xxd /dev/设备名 | head -n 200000 |awk -F":" '{print $2}'| uniq

查看指定设备的前n行是否有不一样的数据,如果一张磁盘未使用,那么所有位置均为00 00 。如果该命令只输出了一条记录0000000000这种的那么可以判定该盘没有数据。

谨慎起见可以适当增加-n 后的数字,此处的200000表示前200000行。用户可根据自己实际环境调整。

命令:xxd /dev/设备名 | head -n 1000 | more

/dev/sdc

  1. [root@136-b ~]# xxd /dev/sdc | head -n 1000 | more
  2. 00000000: 7465 7374 3131 3131 3131 3131 310a 0000 test111111111...
  3. 00000010: 0000 0000 0000 0000 0000 0000 0000 0000 ................
  4. 00000020: 0000 0000 0000 0000 0000 0000 0000 0000 ................
  5. 00000030: 0000 0000 0000 0000 0000 0000 0000 0000 ................
  6. 00000040: 0000 0000 0000 0000 0000 0000 0000 0000 ................
  7. ................

结论:/dev/sdc存在数据,但是数据不多,/dev/sdc直接作为裸盘使用。

/dev/sdd

  1. [root@136-b ~]# xxd /dev/sdd | head -n 1000 | more
  2. 00000000: 0000 0000 0000 0000 0000 0000 0000 0000 ................
  3. 00000010: 0000 0000 0000 0000 0000 0000 0000 0000 ................
  4. 00000020: 0000 0000 0000 0000 0000 0000 0000 0000 ................
  5. 00000030: 0000 0000 0000 0000 0000 0000 0000 0000 ................
  6. 00000040: 0000 0000 0000 0000 0000 0000 0000 0000 ................
  7. ................

结论:/dev/sdd不存在任何数据,所有元数据都是0000,/dev/sdd没有以任何形式使用。

linux下确认裸盘是否使用-渐入佳境的更多相关文章

  1. 实现Linux下的U盘(USB Mass Storage)驱动

    如何实现Linux下的U盘(USB Mass Storage)驱动 版本:v0.7 How to Write Linux USB MSC (Mass Storage Class) Driver Cri ...

  2. 如何实现Linux下的U盘(USB Mass Storage)驱动

    如何实现Linux下的U盘(USB Mass Storage)驱动 版本:v0.7 How to Write Linux USB MSC (Mass Storage Class) Driver Cri ...

  3. linux下挂载U盘

    转:http://www.cnblogs.com/yeahgis/archive/2012/04/05/2432779.html linux下挂载U盘 一.Linux挂载U盘: 1.插入u盘到计算机, ...

  4. LINUX下的U盘挂载

    linux下如果没有图形界面的情况下就要我们自己熟悉命令来挂载U盘,下面给大家详细描述下U盘的挂载过程. 1. 插入U盘 2. #sudo fdisk –l 查看所挂载盘符名称如下图,假设盘符名称为s ...

  5. 怎样在linux下对U盘进行格式化和分区

    说明,为了不做无用功,首先必须卸载要分区的设备,分区才能执行成功.通过命令umount /media/?? 或者umount /mnt/??? 看你的实际情况,这一步必不可少.1.首先通过命令fdis ...

  6. linux下挂载U盘【转】

    转自:http://www.cnblogs.com/yeahgis/archive/2012/04/05/2432779.html 一.Linux挂载U盘:1.插入u盘到计算机,如果目前只插入了一个u ...

  7. linux下给U盘分区&制作文件系统

    这几天读到TLCL-Storage Media一节,不由的想要折腾一下U盘,一直以来U盘只是被拿来暂存数据,其内部有没有文件系统,数据怎么管理,那是从来也不清楚,本文就依葫芦画瓢,折腾下手中的King ...

  8. linux下转换U盘文件系统

    打算在windows 7 下复制一个12G 的文件至U盘,无奈U盘为FAT32格式,最大支持移动4G 的文件,只能将U盘文件系统格式化为NTFS.windows 7系统出现问题,转化中总是出现错误.故 ...

  9. linux下挂载U盘方法

    1.使用 cat /proc/partitions 查看系统现在有哪些分区:[root@localhost ~]# cat /proc/partitions major minor  #blocks  ...

随机推荐

  1. golang中锁

    一.什么场景下需要用到锁当程序中就一个线程的时候,是不需要加锁的,但是通常实际的代码不会只是单线程,有可能是多个线程同时访问公共资源,所以这个时候就需要用到锁了,那么关于锁的使用场景主要涉及到哪些呢? ...

  2. IoC容器-Bean管理XML方式(注入内部bean和级联赋值)

    注入属性-内部bean和级联赋值 (1)一对多关系:部分和员工 一个部门有多个员工,一个员工属于一个部门 部门是一,员工是多 (2)在实体类之间表示一对多关系 (3)在spring配置文件中进行配置 ...

  3. IoC容器-Bean管理XML方式(注入空值和特殊符号)

    Ioc操作Bean管理(xml注入其他类型属性), 字面量 (1)null值 (2)属性值包含特殊符号

  4. Java高级语法之反射

    Java高级语法之反射 什么是反射 java.lang包提供java语言程序设计的基础类,在lang包下存在一个子包:reflect,与反射相关的APIs均在此处: 官方对reflect包的介绍如下: ...

  5. python采用json.dump和json.load存储数据

    #!/usr/bin/python # -*- coding: UTF-8 -*- import json numbers = [2,3,4,7,11,13] filename = 'numbers. ...

  6. python函数关键字实参传参

    #!/usr/bin/python #coding=utf-8 #好好学习,天天向上 def describe_pet(type,name): print(f"i have a {type} ...

  7. python14day

    昨日回顾 匿名函数:一句话函数 内置函数II 闭包: 内层函数对外层函数非全局变量的引用 一定存在于嵌套函数中 作用:保护数据安全,自由变量不会在内存中消失,而且全局还引用不到 今日内容 装饰器: 装 ...

  8. python 小兵之小技巧

    用for循环打印数字从1开始 for a in range(1,num+1): 用split切割字符串可以用索引选择部分 int(el.split("_")[1]) range 第 ...

  9. 常见消息处理api

    面试:子线程一定不能更新UI? SurfaceView :多媒体视频播放 ,可以在子线程中更新UI: Progress(进度)相关的控件:也是可以在子线程中更新Ui;审计机制:activity完全显示 ...

  10. PHP的这些基础知识你应该熟知

    PHP变量的值类型和引用类型 四种基本类型(int,float,string,boolean)以及复合类型(array)均为值类型,变量间的赋值传递的是值,相当于创建一个副本给新变量. 对象(obje ...