linux 磁盘管理

Posted zhuchangwu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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字节

技术图片

其中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 查看到哪个文件系统挂载到该分区了

技术图片

然后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/

以上是关于linux 磁盘管理的主要内容,如果未能解决你的问题,请参考以下文章

【Linux命令】磁盘管理(逻辑卷与物理卷)

Linux 下磁盘管理--逻辑卷--LV

20磁盘管理—linux磁盘管理详解(分区)

Linux 磁盘管理

Linux 磁盘管理

Linux磁盘管理(fdisk磁盘管理工具|swap交换分区|LVM逻辑卷管理)