1、设备文件


I/O Ports: I/O设备地址。


设备文件的使用:

   通过将文件关联至一个设备驱动程序,进而能够跟与之对应硬件设备进行通信。
    一切皆文件,所以磁盘的也是也是基于设备文件与之通信的:open(), read(), write(), close()


设备号码:

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


硬盘接口类型:

    并行:    
        IDE:133MB/s
        SCSI:640MB/s
    串口:
        SATA:6Gbps
        SAS:6Gbps
    USB:480MB/s
        rpm: rotations
        per minute



磁盘设备的设备文件命名:

    /dev/DEV_FILE
    
    SCSI, SATA, SAS, IDE,USB: /dev/sd;
    虚拟磁盘:/dev/vd;
    
    不同磁盘标识:a-z,aa,ab…/dev/sda, /dev/sdb, ...;
    同一设备上的不同分区:1,2, .../dev/sda1, /dev/sda5;



2、磁盘结构


2.1、机械硬盘(HDD)


Linux基础管理——磁盘管理及文件系统(全)_第1张图片

Linux基础管理——磁盘管理及文件系统(全)_第2张图片


2.2、固态硬盘(SSD)和机械硬盘(HDD)


Linux基础管理——磁盘管理及文件系统(全)_第3张图片



2.3、硬盘存储术语及扇区结构


head:磁头;
track:磁道;
cylinder: 柱面;
sector: 扇区,512bytes;


(1)早期扇区结构


Linux基础管理——磁盘管理及文件系统(全)_第4张图片


(2)区位记录磁盘扇区结构:ZBR(Zoned Bit Recording)

Linux基础管理——磁盘管理及文件系统(全)_第5张图片



2.4、CHS和LBA


CHS:

   采用24bit位寻址;
    最大寻址空间8GB;

LBA(logical block addressing)

   LBA采用48个bit位寻址
    最大寻址空间128PB


    注意:

    由于CHS寻址方式的寻址空间在大概8GB以内,所以在磁盘容量小于大概8GB时,可以使用CHS寻址方式或是LBA寻址方式;在磁盘容量大于大概8GB时,则只能使用LBA寻址方式。



2.5、使用分区空间


    设备识别;
    设备分区;
    创建文件系统;
    标记文件系统;
    在/etc/fstab文件中创建条目;
    挂载新的文件系统;


2.5、磁盘分区的意义及分区类型


磁盘分区意义:

    优化I/O性能
    实现磁盘空间配额限制
    提高修复速度
    隔离系统和程序
    安装多个OS
    采用不同文件系统



两种分区方式:MBR,GPT


2.5.1、MBR


MBR:

    Master Boot Record,1982年,使用32位表示扇区数,分区不超过2T;    
    按柱面


MBR分区结构:

硬盘主引导记录MBR由4个部分组成:

    主引导程序(偏移地址0000H--0088H):它负责从活动分区中装载,并运行系统引导程序。
    出错信息数据区:偏移地址0089H--00E1H为出错信息,0E2H--01BDH全为0字节。
    
    分区表(DPT,Disk Partition Table):含4个分区项,偏移地址01BEH--01FDH,每个分区表项长16个字节,共64字节;为分区项1、分区项2、分区项3、分区项4
    结束标志字:偏移地址01FE--01FF的2个字节值为结束标志55AA。



2.5.2、GPT分区

GPT:

    GUID(Globals Unique Identifiers) partition table;    
    支持128个分区,使用64位,支持8Z(512Byte/block)、64Z (4096Byte/block);
    使用128位UUID(Universally Unique Identifier) 表示磁盘和分区;
    
    GPT分区表自动备份在头和尾两份,并有CRC校验位UEFI;
    (统一扩展固件接口)硬件支持GPT,使操作系统启动


3、分区管理


3.1、图形化

图形化磁盘管理功能工具:

    点击“应用程序” ->“系统工具” ->“磁盘”;
    执行命令gnome-disks


3.2、分区管理


列出块设备:lsblk;
创建分区使用:
    fdisk 创建MBR分区;
    gdisk 创建GPT分区;
    parted 高级分区操作;
    
partprobe-重新设置内存中的内核分区表版本;


3.3、parted命令


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

语法:

    parted [选项]... [设备 [命令 [参数]...]...]

示例:

    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


3.3、分区工具:fdisk & gdisk


    gdisk /dev/sdb:类fdisk 的GPT分区工具;

    fdisk -l [-u] [device...] 查看分区;
    fdisk /dev/sdb 管理分区;


子命令:

    p 分区列表
    t 更改分区类型
    n 创建新分区
    d 删除分区
    v 校验分区
    u 转换单位
    w 保存并退出
    q 不保存并退出



查看内核是否已经识别新的分区:
    cat /proc/partations


同步分区表:

centos6通知内核重新读取硬盘分区表:
    新增分区用:
        partx -a /dev/DEVICE
        kpartx -a /dev/DEVICE -f: force
    删除分区用:
        partx -d --nr M-N /dev/DEVICE

CentOS 5,7:使用partprobe
    partprobe [/dev/DEVICE]



4、文件系统管理


4.1、文件系统类型

    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:未经处理或者未经格式化产生的文件系统


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


4.2、创建文件系统

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:

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


dumpe2fs:

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


4.3、文件系统检测和修复

    常发生于死机或者非正常关机之后;    
    挂载为文件系统标记为“ no clean”;
    注意:一定不要在挂载状态下修复;
fsck: File System Check

fsck.FS_TYPE
fsck -t FS_TYPE
    -p: 自动修复错误
    -r: 交互式修复错误
    FS_TYPE一定要与分区上已经文件类型相同;


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



5、挂载


挂载:

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


注意:

    挂载点下原有文件在挂载完成后会被临时隐藏;    
    挂载点目录一般为空;
    事先存在;建议使用空目录;
    进程正在使用中的设备无法被卸载;


语法:

mount DEVICE MOUNT_POINT
mount [-fnrsvw] [-t vfstype] [-o options] device dir
    -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:是否允许普通用户挂载此设备,/etc/fstab使用
    acl:启用此文件系统上的acl功能
    loop: 使用loop设备
defaults:相当于rw, suid, dev, exec, auto, nouser, async



6、卸载命令


查看挂载情况

findmnt MOUNT_POINT|device


查看正在访问指定文件系统的进程

lsof MOUNT_POINT
fuser -v MOUNT_POINT


终止所有在正访问指定的文件系统的进程

fuser -km MOUNT_POINT


卸载

umount DEVICE
umount MOUNT_POINT




7、文件挂载配置文件


注意:使用mount -a 命令挂载/etc/fstab中的所有文件系统

/etc/fstab每行定义一个要挂载的文件系统:

1)要挂载的设备或伪文件系统;
    设备文件;
    LABEL:LABEL="";
    UUID:UUID="";
    伪文件系统名称:proc, sysfs;

2)挂载点;

3)文件系统类型;

4)挂载选项:defaults;

5)转储频率:0:不做备份 1:每天转储 2:每隔一天转储;

6)自检次序:
    0:不自检;
    1:首先自检;一般只有rootfs才用1;




8、处理交换文件和分区


交换分区是系统RAM的补充。


8.1、基本设置

    创建交换分区或者文件    
    使用mkswap写入特殊签名
    在/etc/fstab文件中添加适当的条目
    使用swapon -a 激活交换空间




交换分区的启用与禁用:

    启用:swapon
    swapon [OPTION]... [DEVICE]
        -a:激活所有的交换分区;
        -p PRIORITY:指定优先级
        /etc/fstab:pri=value
    禁用:swapoff [OPTION]... [DEVICE]


8.2、SWAP的优先级



    可以指定swap分区0到32767的优先级,值越大优先级越高;    
    
    如果用户没有指定,那么核心会自动给swap指定一个优先级,这个优先级从-1开始,
    每加入一个新的没有用户指定优先级的swap,会给这个优先级减一;
    
    先添加的swap的缺省优先级比较高,除非用户自己指定一个优先级,
    而用户指定的优先级(是正数)永远高于核心缺省指定的优先级(是负数);
    
    优化性能:分布存放,高性能磁盘存放;



spacer.gif