• 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挂载

    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 

    挂载

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

    # 将做好的文件系统挂载到 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将无法挂载,创建和拷贝操作无法执行
    要有多努力才能对得起奔波的脚步和身上的期望
  • 相关阅读:
    DFS and BFS
    278. First Bad Version
    67. Add Binary
    Luogu3426 [POI2005]SZA-Template (KMP)(未完成)
    Luogu2375 [NOI2014]动物园 (KMP)
    Luogu3435 [POI2006]OKR-Periods of Words (KMP)
    Luogu4391 [BOI2009]Radio Transmission 无线传输 (KMP)
    Luogu2922 [USACO08DEC]秘密消息Secret Message (Trie树)
    Luogu2580 于是他错误的点名开始了 (Trie树)
    Luogu3375 【模板】KMP字符串匹配
  • 原文地址:https://www.cnblogs.com/hxfcodelife/p/11946658.html
Copyright © 2020-2023  润新知