zoukankan      html  css  js  c++  java
  • linux 磁盘管理

    设备文件

    在linux中,磁盘和分区都表示成文件, 磁盘的设备文件都是在 /dev/sd*
    如下:

    [root@localhost ~]# ll /dev/sd*
    brw-rw----. 1 root disk 8, 0 Sep  4 03:11 /dev/sda
    brw-rw----. 1 root disk 8, 1 Sep  4 03:11 /dev/sda1
    brw-rw----. 1 root disk 8, 2 Sep  4 03:11 /dev/sda2
    brw-rw----. 1 root disk 8, 3 Sep  4 03:11 /dev/sda3
    

    结果解读

    当前我的机器上有/dev/sda 一块硬盘,这个硬盘被分成1,2,3 三个分区

    他们的命名规则就是 a,b,c .. 表示硬盘的顺序号, 1,2,3... 表示分区号

    • 老式的硬盘IDE接口是hd开头
    • sd开头的是最普及的SATA设备

    什么是MBR?

    MBR (Master Boot Record) 主引导程序

    简单的说,有了它是系统的引导程序,可以引导体统从硬盘上启动, 换句话说,一旦硬盘的主引导程序被破坏后,就无法从直接从硬盘启动机器了,(可以尝试从光盘上启动)

    组成

    MBR 大小512字节,分如下三部分

    • 主引导程序: 446字节
    • 硬盘分区表DPT: 64字节
    • 分区结束标记: 2字节

    MBR组成图

    其中DPT是磁盘分区表, 总共64字节,如果每一个主分区占用16字节,那么受到磁盘分区表的限制,64/16=4 个分区, 其中至少有一个分区是主分区, 但是可以通过添加拓展分区,一个拓展分区下可以存在多个逻辑分区,打破这种分区受限的局面


    为什么要分区?

    linux中的分区,和window中划分C盘 D盘 F盘 是差不多的,如果不分区, 系统上的所有数据,软件全部在一个盘符上,电脑出现故障这个盘符上的数据就会全部丢失,这就是为什么要去分区

    硬盘的容量=主分区的容量+扩展分区的容量

    扩展分区的容量=各个逻辑分区的容量之和

    dd命令

    作用:从指定的文件中抽取指定长度的数据,(从底层复制磁盘上的数据),而cp,是在文件系统的基础上进行拷贝

    格式: dd if=输入文件 of=输出文件 bs=单位大小 count=重复数量

    将输入文件中的内容输出到输出文件中

    • count: 备份的次数
    • skip: 从input源中跳过指定容量的数据
    • seek: 从output源中跳过指定大小的数据
    • ids: input中每块的单位字节数, 默认单位 字节
    • ods: output中每块的单位字节数, 默认单位 字节
    • bs: 包含 ids 和 ods ,默认单位 字节

    注意下: 可以跳着写, 但是不能跳着读

    例:比如,想破坏DPT,就是越过磁盘开头部分446字节,然后写入64字节

    // 跳过446块, 每块1字节  , 写入64次,每次1字节
     dd if=/dev/zero/   of=/dev/sda  seek=446 obs=1 ids=1 count=64
     dd if=/dev/zero/   of=/dev/sda  seek=446  bs=1 count=64
    

    备份MBR

    如果想防止因为主引导程序被破坏导致系统启动不起来,可以尝试备份MBR文件,但是,最好需要把他备份到其他磁盘的分区去,不然也是白备份

    dd if=/dev/sda of=mbr.bak bs=512 count=1
    将/dev/sda 这第一块磁盘上的开头512字节(整好是MBR)备份到 mbr.bak文件中
    

    还原MBR

    反向备份

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

    常用 /dev/zero

    创建指定大小的空文件

    dd if=/dev/zero of=test bs=1M count=10
    

    磁盘和分区的结构

    磁盘和分区的结构

    一般逻辑分区的序号都是从5开始的

    查看分区的情况

    命令:

    fdisk -l
    
    ###################   11111111   ########################
    #    设备文件   容量    
    Disk /dev/sda: 42.9 GB, 42949672960 bytes, 83886080 sectors
    # 每一个分区,都至少占用1个扇面, Units指定了每一个扇面的大小
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk label type: dos
    Disk identifier: 0x000ba572
    # 分区的详情        开始位置   结束位置   , 他没可能被连续,但是绝对没重合
       Device Boot      Start         End      Blocks   Id  System
    /dev/sda1            2048        4095        1024   83  Linux
    /dev/sda2   *        4096     2101247     1048576   83  Linux
    /dev/sda3         2101248    83886079    40892416   8e  Linux LVM
    #################   2222222222  ##########################
    Disk /dev/mapper/VolGroup00-LogVol00: 40.2 GB, 40231763968 bytes, 78577664 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    
    ################   333333333333   ###########################
    Disk /dev/mapper/VolGroup00-LogVol01: 1610 MB, 1610612736 bytes, 3145728 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    
    

    可以直接使用管道统计数量

    [root@localhost ~]# fdisk -l | grep "Disk /d" | wc -l
    3
    

    详解fdisk

    假设我们给电脑新添加了一块硬盘,想使用这个硬盘就得给他分区,格式化,再挂载上文件系统

    其实有两种分区方式:

    • fdisk 命令
      • 限制大小2T
    • parted 命令
      • 不限制大小

    fdisk创建分区

    格式: fdisk /dev/[硬盘名]

    按照提示往下进行

    • m: 查看操作指令的帮助信息
    • p: 列表查看分区信息
    • n: 新建分区
    • d: 删除分区
    • t: 变更分区类型
    • w: 保存分区设置 并退出
    • q: 放弃保存分区信息,并退出

    假如是这种情况: 新添加了一块硬盘,先分区,再把系统中的一个文件系统挂载到了这个分区上, 接着使用这个分区, 但是呢你又想去分区了, 在最后一步 w保存时,可能会失败,警告说,当前的磁盘正在被使用,下次reboot时,再为你创建新的分区设备文件

    解决: 通过df 查看到哪个文件系统挂载到该分区了

    df命令查看分区情况

    然后unmount [文件系统], 再使用 partrobe(8),为新分区创建文件目录

    partprobe命令: 告诉内核, 系统分区表被改动了, 调用 ioctl() 重新读取分区表
    修改磁盘分区后不用重启, 使用partprobe更新磁盘变化

    完整流程参考这里

    parted 命令

    作用: 支持对大容量硬盘的分区 ( 兼容大小容量的硬盘 )

    (相对于fdisk 他能自动保存)
    使用parted 分区之后, 再使用 fdisk查看, fdisk -l /dev/[分区目录]
    需要使用 parted /dev/[分区]/ p 才能看到最新的分区详情

    [root@localhost ~]# parted /dev/sda
    GNU Parted 3.1
    Using /dev/sda
    Welcome to GNU Parted! Type 'help' to view a list of commands.
    
    # 使用print 打印出分区情况,及当前系统使用的什么文件系统
    (parted) print                                                            
    Model: ATA VMware Virtual I (scsi)
    Disk /dev/sda: 42.9GB
    Sector size (logical/physical): 512B/512B
    Partition Table: msdos
    Disk Flags: 
    
    Number  Start   End     Size    Type     File system  Flags
     1      1049kB  2097kB  1049kB  primary
     2      2097kB  1076MB  1074MB  primary  xfs          boot
     3      1076MB  42.9GB  41.9GB  primary               lvm
    
    

    挂载

    完成分区后格式化该分区, 接着就可以将文件系统挂载到该分区使用, 这时,该文件系统中的全部数据都存放在该分区中

    格式化:
    mkfs命令
    格式: mkfs -t 文件系统类型

    mkfs.ext4  [分区文件目录]
    例: mkfs.ext4  /dev/sda1
    (CentOS6使用 ext4 作为默认的文件系统。)
    ((CentOS7使用 xfs 作为默认的文件系统。)
    

    挂载:

    设置只读权限
    mount -o ro [路径]
    

    先创建一个空目录, 然后将这个分区挂载到这个空目录

    mount [分区目录] [目标目录]
    mount /dev/sdb1  /sdb1/
    
  • 相关阅读:
    使用非root用户在RedHat 4下安装XHProf
    使用ClippingNode对精灵进行遮罩处理
    令Code::Blocks支持C++11特性
    解决cocos2dx在VS2012中文版环境下不支持中文的问题
    bzoj 1045[HAOI2008] 糖果传递
    bzoj 1070[SCOI2007]修车
    bzoj [ZJOI2010]网络扩容
    bzoj 1089[SCOI2003]严格n元树
    bzoj 4566[Haoi2016]找相同字符
    bzoj 1085[SCOI2005]骑士精神
  • 原文地址:https://www.cnblogs.com/ZhuChangwu/p/11519228.html
Copyright © 2011-2022 走看看