linux磁盘管理1-分区格式化挂载,swap,df,du,dd

一些基础

硬盘接口类型 

  • ide 早期家庭电脑 scsi 早期服务器  这两个目前已经被淘汰
  • sata 目前家庭电脑 sas 目前服务器,是新一代的scsi技术,向下兼容stat,  ssd
  • raid卡--阵列卡
  • 网卡绑定
  • ABI 应用程序与OS之间的底层接口
  • API 应用程序调用第三方库的接口
  • Windows 磁盘分区方式,不同的方式,BIOS的设置是不同的
  • 硬盘分区格式为MBR格式,启动模式应该为Legacy;
  • 硬盘分区格式为GUID(GPT)格式,启动模式应该为UEFI
  • BIOS+MBR 以前的方式,分区最大支持2T    与UEFI+GPT 是目前最新的方式,硬盘支持容量特别大
  • 硬盘寻址方式与空间大小:由于CHS寻址方式的寻址空间在大概8GB以内,所以在磁盘容量小于大概8GB 时,可以使用CHS寻址方式或是LBA寻址方式;在磁盘容量大于大概8GB时,则 只能使用LBA寻址方式 

  

 

 

 

 nvme是协议,m.2是接口类型,sata,pcie就是通道不一样,pcie相当于顺丰快递,sata就是普通快递

nvme是一种协议,走的是PCle通道,速度超级快。而普通的M.2 走的是SATA通道,发挥不出M.2的优势,和普通的SATA接口差不多。

走sata的速度跟传统sata接口的没区别,就是接口变成了m2的了。走pcie的,就是我们说的nvme接口是m2的,性能也强了。

 

 

 

大部分 服务器接口都是sas盘,sas盘容量一般300G(15K,价格1300),600G,假 sas 盘=stat盘身+sas接口,就是普通家庭用的盘2T 1千块,符合市场需求

假 sas 盘,提速度,做raid5,raid10 或者分部署存储,MFS,HDFS,GFS,swift,ceph

 

设备在Linux的命名方式

SCSI, SATA, SAS, IDE,USB: /dev/sd ?    设备都以/dev/sd开头
虚拟磁盘:/dev/vd 、/dev/xvd ?
不同磁盘标识:a-z,aa,ab… /dev/sda, /dev/sdb, ... ?  第一块磁盘就是a ,第二块就是b.....
同一设备上的不同分区:1,2, ... /dev/sda1, /dev/sda5  第一个分区就是1,第二个分区就是2....

 

 分区类型

MBR:(只支持2T的硬盘分区)

  • 主分区:一块硬盘最多四个,最少一个,安装OS,只有1个是激活主分区
  • 扩展分区:一块硬盘最多一个,不能直接使用,需要划分成更小的逻辑分区
  • 逻辑分区:扩展分区的最小分区单位
  • 在Linux中 MBR分区类型,主分区和扩展分区只能有1-4个,扩展分区从5往后。
  • Master Boot Record
  • 0磁道0扇区:512bytes   446bytes: boot loader   64bytes:分区表,其中每16bytes标识一个分区   2bytes: 55AA 

比如 Linux分区方案
/dev/sda 200G
/dev/sda1 mount /boot 1G mount point
/dev/sda2 mount / 100G
/dev/sda3 mount /data 50G
/dev/sda4 extend 49G
/dev/sda5 逻辑分区 swap 4G
有一块200G的硬盘,3个主分区1个扩展分区,扩展分区分了剩余的所有空间,扩展分区中分了4G的逻辑分区给swap,swap分区是Linux的(虚拟内存)没有挂载点

 

MBR 最前面的512字节中,有MBR分区表,这个表记录了分区的情况 

GPT:只支持主分区    uuidgen //生成UUID guid:128位二进制 32位16进制

 

管理分区

1分区 2格式化(文件系统) 3挂载

Parted工具适用于MBR分区和GPT分区,fdisk分区工具只适用于MBR分区。

使用 parted 做gpt分区
yum install -y parted
parted /dev/vdb
mklabel gpt
mkpart primary 1 100%   ////划分一个主分区、分区名为primary且100%容量给到第一个分区
align-check optimal 1   ///检查分区是否对齐,1是对应的分区号
print   ////查看分区表
quit

gdisk /dev/sdb 类fdisk 的GPT分区工具

fdisk -l [-u] [device...] 查看分区

fdisk /dev/sdb  管理分区

子命令:

  • p  分区列表
  • t  更改分区类型
  • n  创建新分区
  • d  删除分区
  • v  校验分区
  • u  转换单位
  • w  保存并退出
  • q  不保存并退出
  • fdisk -l 磁盘硬盘分区详细情况(专门针对于mbr分区的,管理gpt分区处于试验阶段,不太适配)
  • lsblk 列出块设备
  • echo '- - -' > /sys/class/scsi_host/host2/scan 重新扫描磁盘,添加一块硬盘后,重启之后才可以识别到,这样就不用重启了 host0 host1 host2
  • 有时候磁盘满了需要删文件使磁盘使用率降下来,但是有一些进程会占用它,当你删除之后还是那么大,可以用这个命令立刻让这个文件变成0 >2019-11-08.log

      1)使用fdisk创建完分区之后,默认是mbr分区方式,可以通过 fdisk -l 查看,分好区之后,可以把分区删除掉,把分区删掉之后,在通过 fdisk -l 查看分区,就会看到没了分区了,但是还是存在分区类型的,为什么会存在?

就是因为前512字节中存在 55aa标志位,所以他认为你之前分过区了,怎么让硬盘变得跟新的一样呢?

dd if=/dev/zero of=/dev/sdb bs=1 count=2 seek=510  //把标志位清空

     2)  我们通过fdisk 分完区之后,退出的时候要注意看提示信息,一般新的硬盘你分好之后,内存和硬盘都会分好的,你就可以直接用了,但是如果你分的是之前分过的硬盘,那么你退出后,就会有报警,因为你是分好了,但是内存中没有同步到,你用 fdisk –l 可以看到分好的分区(fdisk 是读取物理磁盘真实的情况,而其他的查看分区命令 如lsblk, ls /dev/sda*,cat /proc/partitions,是读取内存中的分区情况)

    同步问题  要么重启 要么下面的命令

centos6

加分区:partx -a /dev/sda

删除分区: partx -d --nr 5-7 /dev/sda

centos5,7

partprobe

Partprobe

 3) 有两快硬盘,第一块分区分好了,按照同样的方法把第二块也分一下,

  两块硬盘分区同步,第二块硬盘按照第一块硬盘分区方式同步,本质就是同步了第一块硬盘的MBR的前64个字节(主分区与扩展分区)  逻辑分区同步不了,逻辑分区的分区信息是在EBR里面的,所以可以看出,一块硬盘有没有分区,分区格式是什么,分区情况是什么,都是存在MBR表里面的,下面的命令就是同步了MBR的分区表

      

4)那既然一块硬盘有没有分区本质是看MBR表的,那快速清理一个硬盘的分区,就直接把分区表的字节改一下

    

 

建立文件系统(格式化)

      mkfs命令:

      (1) mkfs.FS_TYPE /dev/DEVICE   

        • ext4   
        • xfs   
        • btrfs   
        • vfat

            对于已经存在了文件系统的分区,重新格式化需要加-f选项
    blkid //查看分区的详细信息 文件系统和UUID

Linux和Windows的文件系统类型 不一样~~~

 Linux:常用文件格式 ext2 ext3 ext4 xfs fat
Windows:常用文件格式 FAT32, exFAT,NTFS 

文件系统的修复, 注意:一定不要在挂载状态下执行下面命令修复,虽然可以修复,但是也可能会丢数据

fsck:  修复ext、xfs的文件系统,可以不用指定文件系统名称,直接跟设备名,他自己可以判断出来。
               fsck   -y   /dev/sda3   ///直接开始修复
e2fsck: ext系列的专用文件系统修复
xfs_repair:xfs文件系统专用检测修复工具
  •      xfs_repair  /dev/sda3  ////直接修复
  •        xfs_check /dev/sda3; echo $?   ///检查
  •      A)如果为0===》成功修复。
  •      B) 如果不为0===》没有成功:

挂载

  • 挂载方法:mount DEVICE MOUNT_POINT 
  • mount:通过查看/etc/mtab文件显示当前已挂载的所有设备 
  • 挂载点下原有文件在挂载完成后会被临时隐藏
  • 挂载点目录一般为空  事先存在,建议使用空目录 
  • -r   readonly,只读挂载
  • -w   read and write, 读写挂载
  • df -hl 查看挂载情况
  • 一个设备可以挂载到多个目录下,一个目录一次只能挂载一个设备
  • 也支持文件夹,往文件夹上挂   mount  -B /boot /home/newuser/
  • 也可以把文件 往文件夹上挂,但是这个文件需要有文件系统,我们可以创建一个大文件,然后格式化它,然后就可以挂载到文件夹下了,(有点类似于u盘)

centos7 可以直接挂载文件,虽然一个文件成功挂载到了目录上,但是通过df -h  查看看到的设备是loop0,  因为系统自动为这个文件分配了一个设备名称关联上,自动的

 如果是centos6的话 还需要人工挂载的时候 指定,这样才能把一个文件挂载到一个目录上

# 将做好的文件系统挂载到 newuser 文件夹上

mount /dev/sdb1 /home/newuser/

mount  -o ro  /dev/sdb1 /home/newuser/   ------  mount  -r  /dev/sdb1 /home/newuser/   //两个都一样 只读方式挂载

卸载

  •   umount DEVICE    
  •   umount MOUNT_POINT 
  •   取消挂载的时候,要退出这个目录,不能再目录里面,自己把自己杀掉?也有可能是其他进程访问了,所以 fuser –km   MOUNT_POINT  所有对这个文件访问的进程都杀掉。
  •   查看挂载情况  findmnt   MOUNT_POINT|devic  查看这个是不是一个挂载点,或者一个设备有没有被挂载

 持久挂载/etc/fstab

        /etc/fstab 就是文件系统挂载表

   写到这个文件中,就可以持久挂载,当然也可以写设备的UUID

   示例: /dev/sdb1 /home/newuser/ ext4 defaults  0 0 

             写完之后,重新加载  mount  -a

    如果是文件夹挂文件夹,或者挂载光盘呢?

  /boot   /mnt/boot    none    bind  0  0

/dev/sr0    /mnt/cdrom   iso9660   defaults  0  0

扩展swap分区

      为什么要扩展,swap的大小一般取决于内存的大小,当你物理内存发生变化时,swap也要变化,但是分区怎么变大?都已经分好区了,是没有办法变大的,所以只能扩展

    1,先分区,分区的时候注意更改 ID号82

     2,格式化  mkswap  /dev/sdb1  专门的命令格式化swap分区

  3,挂载,写在  /etc/fstab 中,仿照之前的swap写,然后swapon -a  重新到 /etc/fstab 加载swap空间

  所以现在就是有两个swap分区,当使用swap时,会先使用哪一个分区呢,这个也可以设置的

 

使用文件当swap 

dd if=/dev/zero of=/swapfile bs=1M count=2048  创建2G的大文件

 

 光盘 

  •  在图形环境下自动启动挂载/run/media/<user>/<label>
  • 否则就必须被手工挂载  mount /dev/cdrom  /mnt/
  • 操作光盘:   eject 弹出光盘     eject -t 弹入光盘 
  • 创建ISO文件  cp /dev/cdrom  /root/centos.iso 
  •        mkisofs  -r  -o  /root/etc.iso /etc   把etc整个目录打包制作成ISO文件
  • 刻录光盘  wodim –v –eject centos.iso

df 分区挂载设备的使用情况

 df [OPTION]... [FILE]... 

  • -H 以10为单位 
  • -T  显示文件系统类型 
  • -h human-readable 
  • -i   inodes instead of blocks 
  • -P  以Posix兼容的格式输出  格式不跑偏

du查看目录大小

 du [OPTION]... DIR 

  • -h  human-readable 
  • -s   summary   汇总             
  • --max-depth=#   指定最大目录层级 

     du -sh(在当前目录下运行) ==== du -sh .(在当前目录下运行)  ==  du  -sh  /usr/      显示这个目录的总大小

         

 

  du  -sh  * =====du -sh  /usr/*    对当前目录下每一个目录和文件的大小分别进行汇总(不包括总目录的大小), 但是使用 du -shc * 就会在最后一行显示出目录的总大小

                  

 

    du -h --max-depth=1   这个命令我感觉是废物,只能看到目录的大小,不能看到文件的大小

 

dd 命令convert and copy a file

用法:     

  • dd if=/PATH/FROM/SRC of=/PATH/TO/DEST  bs=# count=#     
  • if=file   从所命名文件读取而不是从标准输入   
  • of=file   写到所命名的文件而不是到标准输出
  • ibs=size     一次读size个byte
  • obs=size        一次写size个byte
  • bs=size    block size, 指定块大小(既是是ibs也是obs)
  • cbs=size         一次转化size个byte
  • skip=blocks    从开头忽略blocks个ibs大小的块
  • seek=blocks   从开头忽略blocks个obs大小的块
  • count=n         复制n个bs 

   命令实例

 备份MBR 

dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1

破坏MBR中的bootloader 

dd if=/dev/zero of=/dev/sda bs=64 count=1 seek=446

有一个大与2K的二进制文件fileA。现在想从第64个字节位置开始读取,需要读 取的大小是128Byts。又有fileB, 想把上面读取到的128Bytes写到第32个字节开 始的位置,替换128Bytes,实现如下         

dd if=fileA of=fileB bs=1 count=128 skip=63 seek=31 conv=notrunc

 备份: 

dd if=/dev/sdx of=/dev/sdy

将本地的/dev/sdx整盘备份到/dev/sdy   第二个磁盘肯定要比第一个硬盘大

dd if=/dev/sdx of=/path/to/image

将/dev/sdx全盘数据备份到指定路径的image文件 

dd if=/dev/sdx | gzip >/path/to/image.gz

备份/dev/sdx全盘数据,并利用gzip压缩,保存到指定路径

恢复: 

dd if=/path/to/image of=/dev/sdx

将备份文件恢复到指定盘 

gzip -dc /path/to/image.gz | dd of=/dev/sdx

将压缩的备份文件恢复到指定盘

  •  拷贝内存资料到硬盘 
  • dd if=/dev/mem of=/root/mem.bin bs=1024 
  • 将内存里的数据拷贝到root目录下的mem.bin文件 
  • 从光盘拷贝iso镜像 
  • dd if=/dev/cdrom of=/root/cd.iso 
  • 拷贝光盘数据到root文件夹下,并保存为cd.iso文件
  • 销毁磁盘数据   
  • dd if=/dev/urandom of=/dev/sda1 
  • 利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据,执行此操作 以后,/dev/sda1将无法挂载,创建和拷贝操作无法执行

 

posted @ 2019-11-28 13:29  我才是酷酷的飞  阅读(1137)  评论(0编辑  收藏  举报