Linux磁盘管理

设备文件

一切皆文件
open(), read(), write(), close()

磁盘结构

磁盘接口类型

并行

  • IDE:133MB/s

  • SCSI:640MB/s

串口

  • SATA:6Gbps

  • SAS:6Gbps

  • USB:480MB/s

rpm

  • rotationsper minute 硬盘每分钟转数

硬盘结构

Linux磁盘管理 图一 Linux磁盘管理 图二


下面我们来介绍几个磁盘存储的数据

  1. head:磁头 即 盘面

  2. track:磁道

  3. cylinder: 柱面

  4. secotr: 扇区,512bytes

每个扇区空间大小为512byte

从图上看扇区是越往内圈越小。的确,扇区面积是小了,但存储的数据量不变,只是数据存储密度增大了而已(存在浪费空间)。

机械硬盘使用8位二进制数表示磁头(head)数,所以最多可以有2^8个磁头即256个

采用10位二进制数表示磁道(track)数,所以最多可以有2^10个磁道即1024个

采用6位二进制数表示扇区(sector)数,所以每个磁道最多可以有2^6个扇区即64个

这里我们可以得到一个公式

单个磁盘最大空间=每个磁道扇区数×每个扇区大小×磁道数×磁头数=64×512(byte)×1024×256=8G

分区是按照柱面来划分的

所以同样的可以得到

一个分区的最小单位=一个磁道大小×磁头数=64×512(byte)×256=8M

所以我们的分区大小通常为8M的整倍数

但实际情况好像并不是这样?

这是因为我们的运算是按照CHS(cylinder、head、sector)的

即每个磁道的扇区数相同

现在一般采用CHS和LBA相结合的方式划分扇区即每个磁道上的扇区数可以不同、并且一个柱面可以属于多个分区

这样单个磁盘最大空间要大的多的多

Linux磁盘管理

磁盘分区

为什么是分区?

  • 优化I/O性能

  • 实现磁盘空间配额限制

  • 提高修复速度

  • 隔离系统和程序

  • 安装多个OS

  • 采用不同文件系统

分区

两种分区方式:MBR,GPT

首先介绍MBR

MBR:master boot record 使用32位(4byte)表示扇区数,所以单个分区不超过2T(2^32×512=2T)

如何分区:按柱面

0磁道0扇区:512bytes

446bytes: boot loader
64bytes:分区表
        16bytes: 标识一个分区
        4个主分区;3主分区+1扩展(N个逻辑分区)
2bytes: MBR区域的有效性标识;55AA为有效

下面我们使用命令来看下MBR的内容

[root@redhat7 ~]# hexdump -C -n 512 /dev/sda

Linux磁盘管理

一个简单实验:

1、使用dd命令备份磁盘的mbr

2、使用dd命令破坏磁盘的mbr

3、使用dd命令利用备份的mbr恢复到磁盘上

[root@redhat7 ~]# fdisk -l /dev/sdb
// 首先查看/dev/sdb  是存在的
[root@redhat7 ~]# dd if=/dev/sdb of=/root/mbr.bak bs=512 count=1
// 备份/dev/sdb的MBR 到 /root/mbr.bak
[root@redhat7 ~]# dd if=/dev/zero of=/dev/sdb bs=512 count=1
// 破坏/dev/sdb的MBR
[root@redhat7 ~]# fdisk -l /dev/sdb
// /dev/sdb的分区表 已经不复存在了
[root@redhat7 ~]# dd if=/root/mbr.bak of=/dev/sdb bs=512 count=1
// 恢复/dev/sdb 的MBR
[root@redhat7 ~]# fdisk -l /dev/sdb
// /dev/sdb的分区表又重新显示了

MBR分区结构

Linux磁盘管理

从图上我们也可以发现一个问题:

实验环境    
/dev/sda为我们正常使用的硬盘
/dev/sdb为我们新添加的一块硬盘

dd if=/dev/sda of=/dev/sdb bs=512 count=1
dd if=/dev/sda of=/dev/sdb bs=1 count=66 skip=446 seek=446
dd if=/dev/zero of=/dev/sdb bs=1 count=2 skip=510 seek=510
dd if=/dev/sda of=/dev/sdb bs=1 count=2 skip=510 seek=510

Linux磁盘管理

从图中我们可以看到复制sda的MBR到sdb,但是它们两个显示的并不一样,sdb没有显示逻辑分区sdb5

所以可以说明MBR存储的只有主分区和扩展分区的分区表信息(最多只能复制4个分区表的信息,这点前面也介绍过);
逻辑分区的分区表信息并不存在于MBR(可以查看前面的图示,这点需要注意)

GPT分区

  • GPT:GUID patition table 支持128个分区,使用64位,支持8Z(512Byte/block )64Z (4096Byte/block)

  • 使用128位UUID 表示磁盘和分区GPT分区表自动备份在头和尾两份,并有CRC校验位

  • UEFI (统一扩展固件接口)硬件支持GPT,使操作系统启动

    操作系统安装在GPT分区中时,要在主板BIOS设置中将电脑设置为支持UEFI启动

GPT分区结构

Linux磁盘管理

管理分区

  • 列出块设备

    [root@redhat7 ~]# blkid 
        blkid -L <label> | -U <uuid>
  • 添加一块新的硬盘作为实验环境

    [root@redhat7 ~]# echo "- - -" > /sys/class/scsi_host/host0/scan
    [root@redhat7 ~]# echo "- - -" > /sys/class/scsi_host/host1/scan
    [root@redhat7 ~]# echo "- - -" > /sys/class/scsi_host/host2/scan
    //在不需要重启的情况下识别新添加的硬盘
  • 创建MBR分区

    fdisk创建MBR分区,也支持GPT,对于一块硬盘,最多只能管理15分区
    
    [root@redhat7 ~]# fdisk -hlep
    Usage:
        fdisk [options] <disk>change partition table
        fdisk [options] -l <disk> list partition table(s)
  • 创建MBR分区

    gdisk [ -l ] device

GNU parted高级分区操作(创建、复制、调整大小等等)

    [root@redhat7 ~]# parted --help
    Usage: parted [OPTION]... [DEVICE [COMMAND [PARAMETERS]...]...]
    Apply COMMANDs with PARAMETERS to DEVICE.  If no COMMAND(s) are given, run in
    interactive mode.

查看是MBR分区还是GPT分区的几个命令,及其混合

[root@redhat7 ~]# gdisk /dev/sdb
[root@redhat7 ~]# gdisk /dev/sdc
[root@redhat7 ~]# fdisk /dev/sdb
[root@redhat7 ~]# fdisk /dev/sdc
[root@redhat7 ~]# fdisk -l /dev/sdc
Disk label type: gpt
[root@redhat7 ~]# fdisk -l /dev/sdb
Disk label type: dos


[root@redhat7 ~]# gdisk -l /dev/sdc
[root@redhat7 ~]# gdisk -l /dev/sdb
// 注意区别

同步分区表

查看内核是否已经识别新的分区
[root@redhat7 ~]# cat /proc/partitions
[root@redhat7 ~]# lsblk
[root@redhat7 ~]# ls /dev/设备名
//以上3个命令为查看内核中的分区表

[root@redhat7 ~]# fdisk -l /dev/设备
//查看为磁盘上的分区表

如果上面和下面命令显示的设备文件不一样,则需要通知内核重新读取硬盘分区表

centos 6

新增分区用
[root@redhat7 ~]# partx -a -n M:N /dev/DEVICE

删除分区用
[root@redhat7 ~]# partx -d -nr M:N /dev/DEVICE

centos 5、7

[root@redhat7 ~]# partprobe [/dev/DEVICE]

parted命令

parted的操作都是实时生效的,小心使用

parted - a partition manipulation program
parted [options] [device [command [options...]...]]


optionss:

-l, --list   lists partition layout on all block devices


COMMANDS:

help [COMMAND]   print general help, or help on COMMAND
mklabel,mktable LABEL-TYPE   create a new disklabel (partition table)
mkpart PART-TYPE [FS-TYPE] START END   make a partition
print [...]  display the partition table,
rm NUMBER    delete partition NUMBER



# parted /dev/sdb mklabel gpt|msdos
# parted /dev/sdb print
# parted /dev/sdb mkpart primary 1 200 (默认M)
# parted /dev/sdb rm 1
# parted -l

文件进系统类型

  • Linux文件系统: ext2, ext3, ext4, xfs(SGI), btrfs(Oracle), reiserfs, jfs(AIX), swap

  • 光盘:iso9660

  • Windows:fat32, ntfs

  • Unix: FFS(fast), UFS(unix), JFS2

  • 网络文件系统:NFS, CIFS

  • 集群文件系统:GFS2, OCFS2(oracle)

  • 分布式文件系统:ceph, moosefs, mogilefs, glusterfs, Lustre

  • RAW:未经处理或者未经格式化产生的文件系统

文件系统分类

  • 根据其是否支持"journal"功能:

    • 日志型文件系统: ext3, ext4, xfs, …

    • 非日志型文件系统: ext2, vfat

  • 文件系统的组成部分:

    • 内核中的模块:ext4, xfs, vfat

    • 用户空间的管理工具:mkfs.ext4, mkfs.xfs,mkfs.vfat

  • Linux的虚拟文件系统:VFS

  • 查前支持的文件系统:cat /proc/filesystems

VFS:Linux虚拟文件系统

Linux磁盘管理

创建文件系统

mkfs命令:
(1) # mkfs.FS_TYPE/dev/DEVICE
    ext4
    xfs
    btrfs
    vfat
(2) # mkfs-t FS_TYPE /dev/DEVICE
    -L 'LABEL': 设定卷标


创建ext文件系统
mke2fs:ext系列文件系统专用管理工具
    -t {ext2|ext3|ext4}
    -b {1024|2048|4096}
    -L 'LABEL'
    -j: 相当于-t ext3

    mkfs.ext3 = mkfs-t ext3 = mke2fs -j = mke2fs -t ext3

    -i#: 为数据空间中每多少个字节创建一个inode;此大小不应该小于block的大小
    -N #:为数据空间创建个多少个inode
    -I 一个inode记录大小128---4096
    -m #: 默认5%,为管理人员预留空间占总空间的百分比
    -O FEATURE[,...]:启用指定特性
    -O ^FEATURE:关闭指定特性

文件系统属性

文件系统标签

  • 指向设备的另一种方法

  • 与设备无关

    blkid:块设备属性信息查看 blkid[OPTION]… [DEVICE] -U UUID: 根据指定的UUID来查找对应的设备 -L LABEL:根据指定的LABEL来查找对应的设备

    e2label:管理ext系列文件系统的LABEL # e2label DEVICE [LABEL]

    findfs:查找分区 findfs[options] LABEL=

tune2fs

tune2fs:重新设定ext系列文件系统可调整参数的值

-l:查看指定文件系统超级块信息;super block
-L 'LABEL':修改卷标
-m #:修预留给管理员的空间百分比
-j: 将ext2升级为ext3
-O: 文件系统属性启用或禁用,–O ^has_journal
-o: 调整文件系统的默认挂载选项,–o ^acl
-U UUID: 修改UUID号

dumpe2fs:
-h:查看超级块信息(分组信息),分区用分组管理

超级块和inode table

Linux磁盘管理

文件系统检测和修复

常发生于死机或者非正常关机之后

挂载为文件系统标记为“dirty”

fsck: File System Check
fsck.FS_TYPE
fsck-t FS_TYPE
-a: 自动修复错误
-r: 交互式修复错误

注意: FS_TYPE一定要与分区上已经文件类型相同;

e2fsck:ext系列文件专用的检测修复工具
-y:自动回答为yes
-f:强制修复

挂载mount

挂载:将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录做为其它文件访问入口的行为

卸载:为解除此关联关系的过程

把设备关联挂载点:mount Point # mount

卸载时:可使用设备,也可以使用挂载点 # umount

挂载点下原有文件在挂载完成后会被临时隐藏

挂载点目录一般为空

挂载方法:mount DEVICE MOUNT_POINT

mount:通过查看/etc/mtab文件显示当前已挂载的所有设备
mount [-fnrsvw] [-t vfstype] [-o options] device dir
device:指明要挂载的设备;
(1) 设备文件:例如/dev/sda5
(2) 卷标:-L 'LABEL', 例如-L 'MYDATA'
(3) UUID, -U 'UUID':例如-U '0c50523c-43f1-45e7-85c0-a126711d406e'
(4) 伪文件系统名称:proc, sysfs, devtmpfs, configfs

    dir:挂载点
事先存在;建议使用空目录
进程正在使用中的设备无法被卸载


[option]
    -t vsftype:指定要挂载的设备上的文件系统类型
    -r: readonly,只读挂载
    -w: read and write, 读写挂载
    -n: 不更新/etc/mtab,相当于#mount
    -a:自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有auto功能)
    -L 'LABEL': 以卷标指定挂载设备
    -U 'UUID': 以UUID指定要挂载的设备
    -B, --bind: 绑定目录到另一个目录上

查看内核追踪到的已挂载的所有设备:
cat /proc/mounts



-o options:(挂载文件系统的选项),多个选项使用逗号分隔
    async:异步模式
    sync:同步模式,内存更改时,同时写磁盘
    atime/noatime:包含目录和文件
    diratime/nodiratime:目录的访问时间戳
    auto/noauto:是否支持自动挂载,是否支持-a选项
    exec/noexec:是否支持将文件系统上运行应用程序
    dev/nodev:是否支持在此文件系统上使用设备文件
    suid/nosuid:不否支持suid和sgid权限
    remount:重新挂载
    ro:只读
    rw:读写
    user/nouser:是否允许普通用户挂载此设备,默认管理员才能挂载
    acl:启用此文件系统上的acl功能
    Defaults:相当于rw, suid, dev, exec, auto, nouser, async

卸载命令

查看挂载情况:
#findmntMOUNT_POINT
查看正在访问指定文件系统的进程:
#lsofMOUNT_POINT
#fuser -v MOUNT_POINT
终止所有在正访问指定的文件系统的进程:
# fuser -km MOUNT_POINT
卸载:
# umountDEVICE
# umountMOUNT_POINT

挂载点和/etc/fstab

配置文件系统体系
被mount、fsck和其它程序使用
系统重启时保留文件系统体系
可以在设备栏使用文件系统卷标
使用mount -a 命令挂载/etc/fstab中的所有文件系统

原创文章,作者:sixijie,如若转载,请注明出处:http://www.178linux.com/41821

(0)
sixijiesixijie
上一篇 2016-08-30
下一篇 2016-08-30

相关推荐

  • day5作业

    软硬链接区别: 1 硬链接会增加连接数,而软链接不会。 2 硬链接始终表示的只是一个文件,只是名字不同而已,而软链接本身就是一个独立的文件,文件内容为指向的文件的路径。 3 命令格式不同。 硬链接: ln filename linkname 软链接: ln -s filename&nbsp…

    系统运维 2016-08-08
  • linux系统故障排除总结

    常见的系统故障 1.确定文体的故障特征 2.重现故障 3.使用工具收集进一步信息,确定根源在何处 4.排除不可能的原因 5.定位故障:             从简单的问题入手      &…

    Linux干货 2016-09-15
  • 马哥网络班N22开学小计

        2010年通信系统硕士毕业就进入了数据中心从事网络运维管理方面的工作,随着工作展开逐渐感受到系统方面的知识可能成为自己IT职业生涯的短板,于是从2015年底开始系统的学习linux。     2016年上半年由于备考RHCE,非常幸运的在网络上接触马哥的2013版linu…

    Linux干货 2016-08-15
  • Linux中账号管理之权限管理(下)

    linux中的账号管理我们在前面两张已经介绍了一些用户和组的相关概念,常用的配置文件,命令的使用。现在我们来看看账号管理中最傲娇的部分就是我们的权限管理。 一、简单介绍权限的概念 以install.log这个文件为例,查看install.log的元数据,从下图可以看出,每个文件或者目录都有它的所属的主和所属组,最左边显示不仅有它所属类型,还有它的读取写入执行…

    Linux干货 2016-08-08
  • 20 shell脚本编程1

    20 shell脚本编程1 一、杂项知识整理 1、脚本文件格式:     #!/bin/bash     (注释信息:)     #description:say hello     #vesion:…

    Linux干货 2016-08-11
  • MySQL优化大全

     1. 优化SQL   1)通过show status了解各种sql的执行频率         show status like 'Com_%'        了解 Com_select,Com_in…

    Linux干货 2015-04-13

评论列表(1条)

  • 马哥教育
    马哥教育 2016-09-01 13:23

    图片看起来是很直观,建议加上文字描述,这样别人才看的东,总体来说总结的还不错,有自己独特的地方。