linux 磁盘管理

简介: 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/
相关文章
|
2月前
|
Ubuntu Linux Shell
Linux系统中如何查看磁盘情况
【9月更文挑战第3天】在Linux系统中,有多种方式查看磁盘情况。可通过命令行工具`df`查看文件系统磁盘使用情况,选项`-h`以人类可读格式显示,`-T`显示文件系统类型;`du`命令显示目录或文件磁盘使用情况,`-h`以人类可读格式显示,`-s`仅显示总计;`fdisk -l`列出磁盘和分区信息。此外,图形界面的磁盘管理工具和文件管理器也可用于查看磁盘使用情况。这些方法有助于更好地管理磁盘空间。
555 4
|
3月前
|
存储 监控 安全
在Linux中,⼀个EXT3的文件分区,当使用touch test.file命令创建⼀个新文件时报错,报错的信息是提示磁盘已满,但是采用df -h命令查看磁盘大小时,只使用了,60%的磁盘空间,为什么会出现这个情况?
在Linux中,⼀个EXT3的文件分区,当使用touch test.file命令创建⼀个新文件时报错,报错的信息是提示磁盘已满,但是采用df -h命令查看磁盘大小时,只使用了,60%的磁盘空间,为什么会出现这个情况?
|
1月前
|
Unix Linux 对象存储
Linux 磁盘管理
Linux 磁盘管理
33 1
|
2月前
|
存储 Linux 5G
Linux 基于 LVM 逻辑卷的磁盘管理【简明教程】
这篇文章介绍了LVM(逻辑卷管理)如何提供灵活的磁盘管理方式,允许动态调整逻辑卷的大小而不会丢失数据。
Linux 基于 LVM 逻辑卷的磁盘管理【简明教程】
|
1月前
|
监控 Linux 测试技术
Linux系统命令与网络,磁盘和日志监控总结
Linux系统命令与网络,磁盘和日志监控总结
55 0
|
1月前
|
监控 Linux 测试技术
Linux系统命令与网络,磁盘和日志监控三
Linux系统命令与网络,磁盘和日志监控三
38 0
|
3月前
|
存储 监控 Linux
|
3月前
|
Prometheus 监控 Ubuntu
在Linux中,如何进行磁盘性能监控?
在Linux中,如何进行磁盘性能监控?
|
3月前
|
存储 监控 Linux
在Linux中,如何管理磁盘配额?
在Linux中,如何管理磁盘配额?
|
3月前
|
监控 Linux
在Linux中,如何监控磁盘I/O性能?
在Linux中,如何监控磁盘I/O性能?