文件系统和挂载

-----------------------------------------------------------------------------------------------------------------------------------------------

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

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

 

设备类型:

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

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

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

  设备号码:

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

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

 

硬盘接口类型

并行:

  IDE:133MB/s

  SCSI:640MB/s

串口:

  SATA:6Gbps

  SAS:6Gbps

  USB:480MB/s

rpm: rotations

     per minute

 

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

 

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

 

相较于HDD,SSD在防震抗摔、传输速率、功耗、重量、噪音上有明显优势,SSD传输速率性能是HDD的2倍

相较于SSD,HDD在价格、容量、使用寿命上占有绝对优势

硬盘有价,数据无价,目前SSD不能完全取代HHD

 

设备文件

  磁盘设备的设备文件命名:/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

硬盘存储术语

  head:磁头

  track:磁道

  cylinder: 柱面

  sector: 扇区,512bytes

 

机械硬盘结构

文件系统和挂载_文件系统 文件系统和挂载_挂载_02

文件系统和挂载_挂载_03

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

文件系统和挂载_文件系统_04


 

硬盘存储术语


 文件系统和挂载_挂载_05

区位记录磁盘扇区结构


 文件系统和挂载_挂载_06

CHS和LBA

  CHS

  采用24bit位寻址

  其中前10位表示cylinder,中间8位表示head,后面6位表示sector

  最大寻址空间8GB

  LBA(logical block addressing)

  LBA是一个整数,通过转换成CHS格式完成磁盘具体寻址

  LBA采用48个bit位寻址

  最大寻址空间128PB

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

 

使用分区空间

  设备识别

  设备分区

  创建文件系统

  标记文件系统

  在/etc/fstab文件中创建条目

  挂载新的文件系统

 

磁盘分区

  为什么分区

  优化I/O性能

  实现磁盘空间配额限制

  提高修复速度

  隔离系统和程序

  安装多个OS

  采用不同文件系统

 

分区

  两种分区方式:MBR,GPT

  MBR: Master Boot Record,1982年,使用32位表示扇区数,分区不超过2T

  如何分区:按柱面

  0磁道0扇区:512bytes

               446bytes: boot loader

               64bytes:分区表

               16bytes: 标识一个分区

               2bytes: 55AA

  4个主分区;3主分区+1扩展(N个逻辑分区)

 

MBR分区结构

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

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

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

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

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

 

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,使操作系统启动

 

管理分区

列出块设备

  lsblk

创建分区使用:

  fdisk创建MBR分区

  gdisk创建GPT分区

  parted高级分区操作

partprobe-重新设置内存中的内核分区表版本

 

parted命令

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

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

      parted /dev/sdbmklabelgpt|msdos

      parted /dev/sdbprint

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

      parted /dev/sdbrm1

      parted –l 列出分区信息

 

 

分区工具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 --nrM-N /dev/DEVICE

CentOS 5,7: 使用partprobe

   partprobe[/dev/DEVICE]

 

文件系统

文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统;

从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等;

支持的文件系统:/lib/modules/`uname–r`/kernel/fs;

各种文件系统:https://en.wikipedia.org/wiki/Comparison_of_file_systems

 

Linux文件系统:

  ext2(Extended file system) :适用于那些分区容量不是太大,更新也不频繁的情况,例如/boot 分区。

  ext3:是ext2 的改进版本,其支持日志功能,能够帮助系统从非正常关机导致的异常中恢复。它通常被用作通用的文件系统

  ext4:是ext 文件系统的最新版。提供了很多新的特性,包括纳秒级时间戳、创建和使用巨型文件(16TB)、最大1EB的文件系统,以及速度的提升

  xfs:SGI,支持最大8EB的文件系统

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

 

文件系统分类

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

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

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

文件系统的组成部分:

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

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

Linux的虚拟文件系统:VFS

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

 

创建文件系统

mkfs命令:

(1) mkfs.FS_TYPE/dev/DEVICE

         ext4

         xfs

         btrfs

         vfat

(2) mkfs-t FS_TYPE /dev/DEVICE

        -L 'LABEL': 设定卷标

 

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

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

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

    -L 'LABEL':修改卷标

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

    -j: 将ext2升级为ext3

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

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

    -U UUID: 修改UUID号

dumpe2fs

    块分组管理,32768块

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

 

文件系统检测和修复

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

挂载为文件系统标记为“no clean”

注意:一定不要在挂载状态下修复

fsck: File System Check

    fsck.FS_TYPE

    fsck-t FS_TYPE

    -p: 自动修复错误

    -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:挂载点

        事先存在;建议使用空目录

        进程正在使用中的设备无法被卸载

mount

  -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

 

mount常用命令选项

-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

 

卸载命令

查看挂载情况

    findmntMOUNT_POINT|device

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

    lsofMOUNT_POINT

    fuser -v MOUNT_POINT

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

    fuser -km MOUNT_POINT

卸载

    umountDEVICE

    umountMOUNT_POINT

 

挂载点和/etc/fstab

配置文件系统体系

被mount、fsck和其它程序使用

系统重启时保留文件系统体系

可以在设备栏使用文件系统卷标

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

 

文件挂载配置文件

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

1、要挂载的设备或伪文件系统

     设备文件

     LABEL:LABEL=""

     UUID:UUID=""

     伪文件系统名称:proc, sysfs

2、挂载点

3、文件系统类型:ext4,xfs,nfs,none

4、挂载选项:defaults,acl,bind

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

6、fsck检查的文件系统的顺序:允许的数字是0, 1, 和2

           0:不自检

           1:首先自检;一般只有rootfs才用

           2:非rootfs使用

 

处理交换文件和分区

  交换分区是系统RAM的补充

  基本设置包括:

    创建交换分区或者文件

    使用mkswap写入特殊签名

    在/etc/fstab文件中添加适当的条目

    使用swapon-a 激活交换空间

 

挂载交换分区

  启用:swapon

   swapon[OPTION]... [DEVICE]

      -a:激活所有的交换分区

      -p PRIORITY:指定优先级

      /etc/fstab:pri=value

  禁用:swapoff[OPTION]... [DEVICE]

 

SWAP的优先级

  可以指定swap分区0到32767的优先级,值越大优先级越高

  如果用户没有指定,那么核心会自动给swap指定一个优先级,这个优先级从-1开始,每加入一个新的没有用户指定优先级的swap,会给这个优先级  减一

  先添加的swap的缺省优先级比较高,除非用户自己指定一个优先级,而用户指定的优先级(是正数)永远高于核心缺省指定的优先级(是负数)

  优化性能:分布存放,高性能磁盘存放

 

移动介质

  挂载意味着使外来的文件系统看起来如同是主目录树的一部分

  访问前、介质必须被挂载

  摘除时,介质必须被卸载

  按照默认设置,非根用户只能挂载某些设备(光盘、DVD、软盘、USB等等)

  挂载点通常在/media 或/mnt下

 

使用光盘

  在图形环境下自动启动挂载/run/media/<user>/<label>

  否则就必须被手工挂载

      mount /dev/cdrom/mnt/

  eject命令卸载或弹出磁盘

  创建ISO文件

      cp/dev/cdrom/root/centos7.iso

      mkisofs -r -o /root/etc.iso /etc

  刻录光盘

      wodim–v –eject centos.iso

 

挂载USB介质

  查看USB设备是否识别

    lsusb

  被内核探测为SCSI设备

    /dev/sdaX、/dev/sdbX、或类似的设备文件

  在图形环境中自动挂载

    图标在[计算机]窗口中创建

    挂载在/run/media/<user>/<label>

  手动挂载

    mount /dev/sdb1 /mnt

 

常见工具

  文件系统空间占用等信息的查看工具:

      df[OPTION]... [FILE]...

      -H 以1000为单位

      -T 文件系统类型

      -h: human-readable

      -i:inodesinstead of blocks

      -P: 以Posix兼容的格式输出

  查看某目录总体空间占用状态:

      du [OPTION]... DIR

      -h: human-readable

      -s: summary --max-depth

 

工具dd

  dd命令:convert and copy a file

  用法:

      dd if=/PATH/FROM/SRC of=/PATH/TO/DEST

      bs=#:block size, 复制单元大小

      count=#:复制多少个bs

  of=file写到所命名的文件而不是到标准输出

  if=file从所命名文件读取而不是从标准输入

  bs=size指定块大小(既是是ibs也是obs)

  ibs=size一次读size个byte

  obs=size 一次写size个byte

  cbs=size 一次转化size个byte

  skip=blocks从开头忽略blocks个ibs大小的块

  seek=blocks从开头忽略blocks个obs大小的块

  count=n只拷贝n个记录

 

  conv=conversion[,conversion...] 用指定的参数转换文件

  转换参数:

  ascii转换EBCDIC 为ASCII

  ebcdic转换ASCII 为EBCDIC

  lcase把大写字符转换为小写字符

  ucase把小写字符转换为大写字符

  nocreat不创建输出文件

  noerror出错时不停止

  notrunc不截短输出文件

  sync 把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐

 

  备份MBR:

      dd if=/dev/sdaof=/tmp/mbr.bakbs=512 count=1

  破坏MBR中的bootloader:

      dd if=/dev/zero of=/dev/sdabs=64 count=1 seek=446

  有一个大与2K的二进制文件fileA。现在想从第64个字节位置开始读取,需要读取的大小是128Byts。又有fileB, 想把上面读取到的128Bytes写到  第32个字节开始的位置,替换128Bytes,实现如下:

      dd if=fileAof=fileBbs=1 count=128 skip=63 seek=31 conv=notrunc

 

  备份:

   dd if=/dev/sdxof=/dev/sdy

   将本地的/dev/sdx整盘备份到/dev/sdy

   dd if=/dev/sdxof=/path/to/image

   将/dev/sdx全盘数据备份到指定路径的image文件

   dd if=/dev/sdx| gzip>/path/to/image.gz

   备份/dev/sdx全盘数据,并利用gzip压缩,保存到指定路径

  恢复:

   dd if=/path/to/image of=/dev/sdx

   将备份文件恢复到指定盘

   gzip-dc /path/to/image.gz | ddof=/dev/sdx

   将压缩的备份文件恢复到指定盘

 

  拷贝内存资料到硬盘

   dd if=/dev/mem of=/root/mem.binbs=1024

    将内存里的数据拷贝到root目录下的mem.bin文件

  从光盘拷贝iso镜像

   dd if=/dev/cdromof=/root/cd.iso

    拷贝光盘数据到root文件夹下,并保存为cd.iso文件

  销毁磁盘数据

   dd if=/dev/urandomof=/dev/sda1

    利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据,执行此操作以后,/dev/sda1将无法挂载,创建和拷贝操作无法执行

  得到最恰当的block size

   dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file

   dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file

   dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file

   通过比较dd指令输出中命令的执行时间,即可确定系统最佳的block size大小

  测试硬盘写速度

   dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000

  测试硬盘读速度

   dd if=/root/1Gb.file bs=64k | dd of=/dev/null

  修复硬盘

   dd if=/dev/sda of=/dev/sda

      当硬盘较长时间(比如1,2年)放置不使用后,磁盘上会产生消磁点。当磁头读到这些区域时会遇到困难,并可能导致I/O错误。当这种情况影      响到硬盘的第一个扇区时,可能导致硬盘报废。上边的命令有可能使这些数据起死回生,且这个过程是安全高效的