一:设备文件

设备文件:关联至一个设备驱动程序,进而能够跟与之对应硬件设备进行通信

设备类型:

    块设备:block,存取单位“块”,磁盘

    字符设备:char,存取单位“字符”,键盘

设备号码:

    主设备号:major number, 标识设备类型

    次设备号:minor number, 标识同一类型下的不同设备

创建设备文件:

    mknod /app/wangkai b 8 5

    mknod /app/dvd b 11 0

    mknod /app/tty1 c 4 1

磁盘设备文件命名规则:

    centos5及其之前

        SCSI, SATA, SAS, USB: /dev/sd*

        IDE: /dev/hd*

    centos6及其之后

        SCSI, SATA, SAS, IDE, USB: /dev/sd*

    KVM: /dev/vd*

    Xen: /dev/xvd*



二:机械硬盘和固态硬盘

1.机械硬盘(HDD):Hard Disk Drive,即是传统普通硬盘,主要由:盘片,磁头,盘片转轴及控制电机,磁头控制器,数据转换器,接口,缓存等几个部分组成。机械硬盘中所有的盘片都装在一个旋转轴上,每张盘片之间是平行的,在每个盘片的存储面上有一个磁头,磁头与盘片之间的距离比头发丝的直径还小,所有的磁头联在一个磁头控制器上,由磁头控制器负责各个磁头的运动。磁头可沿盘片的半径方向运动,加上盘片每分钟几千转的高速旋转,磁头就可以定位在盘片的指定位置上进行数据的读写操作。数据通过磁头由电磁流来改变极性方式被电磁流写到磁盘上,也可以通过相反方式读取。硬盘为精密设备,进入硬盘的空气必须过滤

2.固态硬盘(SSD):Solid State Drive,用固态电子存储芯片阵列而制成的硬盘,由控制单元和存储单元(FLASH芯片、DRAM芯片)组成。固态硬盘在接口的规范和定义、功能及使用方法上与普通硬盘的完全相同,在产品外形和尺寸上也与普通硬盘一致

3.两者的优缺点:SSD在防震抗摔、传输速率、功耗、重量、噪音上有明显优势,SSD传输速率性能是HDD的2倍,相较于SSD,HDD在价格、容量、使用寿命上占有绝对优势,目前SSD不能完全取代HHD。

               爱奇艺20180208090150.png                                      爱奇艺20180208090134.png                                               机械硬盘                                                                       固态硬盘




三:LBA和CHS

1:LBA(Logical Block Address),中文名称:逻辑区块地址。是描述电脑存储设备上数据所在区块的通用机制,一般用在像硬盘这样的辅助记忆设备。LBA可以意指某个数据区块的地址或是某个地址所指向的数据区块。电脑上所谓一个逻辑区块通常是512或1024位组。LBA采用48个bit位寻址,最大寻址空间128PB,通过转换成CHS格式完成磁盘具体寻址。

2:CHS寻址模式:

① CHS寻址模式将硬盘划分为磁头(Heads)、柱面(Cylinder)、扇区(Sector)。

    磁头(Heads):每张磁片的正反两面各有一个磁头,一个磁头对应一张磁片的一个面。因此,用第几磁 头就可以表示数据在哪个磁面。

    柱面(Cylinder):所有磁片中半径相同的同心磁道构成“柱面",意思是这一系列的磁道垂直叠在一起,就形成一个柱面的形状。简单地理解,柱面数=磁道数。

    扇区(Sector):将磁道划分为若干个小的区段,就是扇区。虽然很小,但实际是一个扇子的形状,故称为扇区。每个扇区的容量为512字节。

② 知道了磁头数、柱面数、扇区数,就可以很容易地确定数据保存在硬盘的哪个位置。也很容易确定硬盘的容量,其计算公式是:

    硬盘容量=磁头数×柱面数×扇区数×512字节

③LBA寻址模式是直接以扇区为单位进行寻址的,不再用磁头/柱面/扇区三种单位来进行寻址。但为了保持与CHS模式的兼容,通过逻辑变换算法,可以转换为磁头/柱面/扇区三种参数来表示,但已不是硬盘中的物理位置,而是逻辑位置了。由于CHS寻址方式的寻址空间在大概8GB以内,所以在磁盘容量小于大概8GB时,可以使用CHS寻址方式或是LBA寻址方式;在磁盘容量大于大概8GB时,则只能使用LBA寻址方式。



四:磁盘分区

1:磁盘分区的原因

    (1)优化I/O性能

    (2)实现磁盘空间配额限制

    (3)提高修复速度

    (4)隔离系统和程序

    (5)安装多个OS

    (6)采用不同文件系统

 

2:两种分区方式:MBR,GPT

MBR:我们将包含MBR引导代码的扇区称为主引导扇区。因这一扇区中,引导代码占有绝大部分的空间,故而将习惯将该扇区称为MBR扇区(简称MBR)。由于这一扇区承担有不同于磁盘上其他普通存储空间的特殊管理职能,作为管理整个磁盘空间的一个特殊空间,它不属于磁盘上的任何分区,因而分区空间内的格式化命令不能清除主引导记录的任何信息。主引导扇区由四个部分组成(共占用512个字节):

(1)主引导程序(偏移地址0000H--0088H),它负责从活动分区中装载,并运行系统引导程序。

(2)出错信息数据区,偏移地址0089H--00E1H为出错信息,00E2H--01BDH全为0字节。

(3)分区表(DPT,Disk Partition Table)含4个分区项,偏移地址01BEH--01FDH,每个分区表项长16个字节,共64字节为分区项1、分区项2、分区项3、分区项4

(4)结束标志字,偏移地址01FE--01FF的2个字节值为结束标志55AA

MBR.png                                                        MBR硬盘分区结构图


GPT:

    之前我们已经介绍了MBR分区模式,为什么还要介绍GPT呢?首先我们先来说一下MBR的缺陷:MBR分区方案无法支持超过2TB容量的磁盘。因为这一方案用4个字节存储分区的总扇区数,最大能表示2的32次方的扇区个数,按每扇区512字节计算,每个分区最大不能超过2TB。磁盘容量超过2TB以后,分区的起始位置也就无法表示了。所以,在这种情况下,GPT就诞生了。

    GUID分区表(简称GPT。使用GUID分区表的磁盘称为GPT磁盘)是源自EFI标准的一种较新的磁盘分区表结构的标准。与普遍使用的主引导记录(MBR)分区方案相比,GPT提供了更加灵活的磁盘分区机制。它具有如下优点:

    (1)GPT:GUID(Globals Unique Identifiers)partition table 支持128个分区,使用64位,支持8Z(512Byte/block )64Z (4096Byte/block)

    (2)使用128位UUID(Universally Unique Identifier) 表示磁盘和分区.GPT分区表自动备份在头和尾两份,并有CRC校验位

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

echo '- - -' > /sys/class/scsi_host/host0/scan

                            GPT.png

如上图可见:EFI部分又可以分为4个区域:EFI信息区(GPT头)、分区表、GPT分区、备份区域

注意:BIOS不支持GPT,UEFI支持GPT,如果想要BIOS也要支持GPT则要在BIOS+MBR的基础上再加一块盘:BIOS+MBR+GPT


3:分区管理

(1)查看内核是否同步分区表信息的方法

    lsblk (只限centos6及其之上的系统)

    cat /pro/partitions

    ls /dev/sdX*

(2)更新系统分区表

    partprobe /dev/sda(centos5、centos7) centos6只限对于非系统所在硬盘使用

    partx -a /dev/sda 更新增加的分区

    partx -d /dev/sda --nr m-n

    partx -d /dev/sda --nr 6-7

(3)hexdump -C -n 512 /dev/sda -v :查看MBR分区表

(4)fdisk命令:

    fdisk -l :查找当前系统的所有硬盘(实时)

    fdisk -l /dev/sdb 查找当前系统的某一块硬盘(-l:查看列出类型)

        u 以扇区作为计数单位

        c 不会输出扇区提示

        m 获取帮助

        a 增加启动标示

        d 删除分区

        n 创建 p 主分区 e 拓展分区

        w 保存

        p 随时显示当前分区情况

        t 转换文件类型

    gdisk:与fdisk命令相似,不再赘述。

    parted:   

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

        parted /dev/sdbmklabelgpt|msdos

        parted /dev/sdbprint

        parted /dev/sdbmkpartprimary 1 200 (默认M)

        parted /dev/sdbrm1

        parted -l

提问:如何非交互式创建分区:

    非交互式增加一个1G的分区

(1)echo -e "n\n\n+1G\nw\n" |fdisk /dev/sda

    cat << EOF |fdisk /dev/sda

    > n

    

    > +1G

    > w

    > EOF

(2)echo -e "n\n\n\n+1G\n\nw\ny\n" | gdisk /dev/sdb

(3)parted /dev/sdb primary 1000 2000




例子:

  1. 给当前虚拟机增加一个80G大小的硬盘,要求当前生效可以使用fdisk -l 查看到该硬盘,名为/dev/sdb

    echo '- - -' > /sys/class/scsi_host/host0/scan

    fdisk -l

7.0.png    

2.为/dev/sdb创建一个新的设备名为/app/magediska

    mknod /app/magediska b 8 16

3.对/app/magediska进行分区,要求如下

a.创建/app/magediska1分区,大小为100M,格式化为ext4文件系统,并挂载到/mnt/diska目录下

    fdisk /app/magediska

    mknod /app/magediska1 b 8 17

    mkfs.ext4 /app/magediska1

    mount /app/magediska1 /mnt/diska

7.1.png

7.2.png

b.将/etc/fstab文件复制到在/mnt/diska上后卸载分区。

    cp /etc/fstab diska/

7.3.png

c.仅备份/app/magediska分区的分区表至/app/mbr.bak

    dd if=/app/magediska of=/app/mbr.bak bs=1 count=64 skip=446 seek=446

d.使用dd命令初始化/app/magediska硬盘,使其没有分区表信息

    dd if=/dev/zero of=/app/magediska bs=1 count=64 seek=446

7.4.png

e.再使用fdisk命令创建/app/magediska2分区,格式化为ext3文件系统,并挂载到/mnt/diskb目录下并将/etc/passwd文件复制到该目录下。

    mknod /app/magediska2 b 8 18

    mkfs.ext3 /app/magediska2

    mkdir -p /mnt/diskb

    mount /app/magediska2 /mnt/diskb

    cp /etc/passwd /mnt/diskb/

7.5.png7.6.png7.7.png

f.利用c步骤的备份还原/app/magediska1分区,确保/app/magediska2分区不受影响。最后再次将/app/magediska1挂载到/mnt/diska下,确保其中的fstab文件依然可用。

    dd  if=/app/mbr.bak of=/dev/sdb bs=1 count=16 skip=446 seek=446

    mount /app/magediska1 /mnt/diska/

    umount /mnt/diska/

7.8.png7.9.png7.90.png


总结上例:该例子主要考察如何管理磁盘,包括分区,格式化,挂载等操作,综合性很强,需要指出的是dd命令中skip和seek的含义:

skip表示跳过if设备多少字节

seek表示跳过of设备多少字节



4.文件类型

    文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统。从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等

操作系统支持的文件系统写在:/lib/modules/`uname –r`/kernel/fs 文件中

    文件系统的类型:

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

        光盘:iso9660

        Windows:FAT32, exFAT,NTFS

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

        网络文件系统:NFS, CIFS

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

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

        RAW:未经处理或者未经格式化产生的文件系统,性能好,不好管理。

在这里讲一下网络文件系统:举个例子,在一个公司的邮件传输中postfix (25 smtp)把邮件发到/var/mail下,dovecot (pop3 imap)再把邮件送出/var/mail,这样人们就不会一个个去访问服务器,而/var/mail就是一个网络文件系统nfs。还有一种情况,如果我们想让Linux和Windows互相访问文件,在这种跨平台的情况下就需要CIFS 协议了。

集群文件系统:多台机器访问同一个内容,例如多个用户编辑同一个文件。

    查看当前操作系统所支持的文件系统

    cat /proc/filesystems


VFS:请设想一下这样的问题,操作系统的文件系统有多种,但我们把一种文件考到另一种文件系统中时,为什么不会发生错误呢?没错就是因为VFS(虚拟文件系统),他会和底层的文件系统沟通,这是在内核空间的事情。然后再在用户空间进行运行。就像一个翻译。

                             666.png


5.journal(日志)

    /var/log  主要用于排错 

    oracle 

        redo log :存贮数据库中所做的操作。

    ext3  

        inode bitmap 用来标记inode是否被用

        block bitmap 用来标记block是否被用    

6.文件系统格式化

    mkfs.xfs /dev/sdb1

    mkfs -t xfs /dev/sdb2 [-L '... '](格式化并加标签)

8.0.png

8.1.png



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=<label>

    findfs[options] UUID=<uuid>

    

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

    -l:查看指定文件系统超级块信息;super block

    -L 'LABEL':修改卷标

    -m #:修预留给管理员的空间百分比

    -j: 将ext2升级为ext3

    -O: 文件系统属性启用或禁用,–O ^has_journal

    -o: 调整文件系统的默认挂载选项,–o ^acl

    -U UUID: 修改UUID号

    

    dumpe2fs:

    -h:查看超级块信息,不显示分组信息

    

e2fsck -f /dev/sdb1 :卸载后才能修复


mount

    -t vsftype:指定要挂载的设备上的文件系统类型

    -r: readonly,只读挂载

    -w: read and write, 读写挂载

    -n: 不更新/etc/mtab,mount不可见 (/proc/mounts)

    -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:是否允许普通用户挂载此设备,/etc/fstab使用

acl:启用此文件系统上的acl功能

loop: 使用loop设备

defaults:相当于rw, suid, dev, exec, auto, nouser, async


findmnt /dev/sdb1

lsof /mount point 查看访问该挂载点目录的所有进程信息

fuser -vkm /mount point 强制结束所有访问该挂载点及其子目录的进程。