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)

blob.png

blob.png

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

blob.png

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

head:磁头;

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

(1)早期扇区结构

blob.png

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

blob.png

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/DEVICECentOS 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 Checkfsck.FS_TYPEfsck -t FS_TYPE    -p: 自动修复错误    -r: 交互式修复错误    FS_TYPE一定要与分区上已经文件类型相同;

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

5、挂载

挂载:

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

注意:

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

语法:

mount DEVICE MOUNT_POINTmount [-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_POINTfuser -v MOUNT_POINT

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

fuser -km MOUNT_POINT

卸载

umount DEVICEumount 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