磁盘管理和文件系统

磁盘结构

  • 设备文件:关联至一个设备驱动程序,进而能够跟与之对应硬件设备进行通信
    一切皆文件: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
  • 磁盘设备的设备文件命名:/dev/DEV_FILE

    • IDE: /dev/hd
    • SCSI, SATA, SAS, USB: /dev/sd

      • 不同设备:a-z
        /dev/sda, /dev/sdb, …
        同一设备上的不同分区:1,2, …
        /dev/sda1, /dev/sda5
  • 机械硬盘存储术语

    • head:磁头
      track:磁道
      cylinder: 柱面
      secotr: 扇区,512bytes

    固态硬盘已无这些部件,但依旧使用相关术语

分区类型 :MBR 、GPT

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

    • 如何分区:按柱面
    • 一个扇区512bytes

      • 446bytes: boot loader
        64bytes:分区表
        16bytes: 标识一个分区
        2bytes: 55AA
  • GPT:GUID(Globals Unique Identifiers) partition table 支持128个分区,使用64位,支持8Z(512Byte/block )、64Z ( 4096Byte/block)

    • 使用128位UUID(Universally Unique Identifier)表示磁盘和分区;GPT分区表自动备份在头和尾两份,并有CRC校验位
    • UEFI (统一扩展固件接口)硬件支持GPT,使操作系统启动
  • 图形化磁盘管理功能工具:点击“应用程序”->“系统工具”->“磁盘” 或 执行命令gnome-disks

管理分区

  • 列出块设备:

    • 从内存中读取:lsblk 、 cat /proc/partation 、 ls /dev/sd*
      从硬盘上读取:fdisk
  • 创建分区使用:

    • fdisk 创建MBR分区
      gdisk 创建GPT分区
      parted 高级分区操作(创建、复制、调整大小等等)

fdisk、gdisk (分区)

  • fdisk /dev/sdb
    gfisk /dev/sdb 一种类fdisk的GPT分区工具

  • 查看、创建分区:~]# fdisk -l [-u] [device…]

    • p 分区列表
      t 更改分区类型
      n 创建新分区
      d 删除分区
      w 保存并退出
      q 不保存并退出
  • 同步分区表

    • 查看内核是否已经识别新的分区:
      ~]# cat /proc/partitions
      ~]# ls /dev/sd*
    • partprobe-重新设置内存中的内核分区表版本

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]

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

文件系统

文件系统

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

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

  • Linux支持的文件系统:cd /lib/modules/uname –r/kernel/fs

  • 链接文件:访问同一个文件不同路径

    • 硬链接:指向同一个inode的多个文件路径;
      特性:

      1. 目录不支持硬链接;
      2. 硬链接不能跨文件系统
      3. 创建硬链接会增加inode引用计数

      创建:ln [原文件] link_file

    • 符号链接:指向一个文件路径的另一个文件路径;
      特性:

      1. 符号链接与原文件是两个各自独立的文件,各有自己的inode;对原文件创建符号链接不会增加引用计数
      2. 支持对目录创建符号链接,可以跨文件系统
      3. 删除符号链接不影响原文件;但删除原文件,符号指定的路径即不存在,此时会变成无效链接;
        注:符号链接的大小是其指定的文件的路径字符串的字节数;

      软链接中的相对路径是相对于软链接的路径,而非目录的路径:

      错误:
      [root@magedu apps]# ln -s ../etc/issue /apps/http22/issuelink2
      [root@magedu apps]# ll ./http22/issuelink2
      lrwxrwxrwx. 1 root root 12 Mar 29 18:47 ./http22/issuelink2 -> ../etc/issue

      正确:
      [root@magedu apps]# ln -s ../../etc/issue /apps/http22/issuelink3
      [root@magedu apps]# ll ./http22/issuelink3
      lrwxrwxrwx. 1 root root 15 Mar 29 18:48 ./http22/issuelink3 -> ../../etc/issue

      创建:ln -s [原文件] link_file

  • 文件系统类型

    • Linux文件系统:ext2(无日志功能), ext3,ext4, xfs(SGI), btrfs(Oracle), reiserfs, jfs(AIX), swap
    • 光盘:iso9660
    • 网络文件系统:NFS, CIFS
    • 集群文件系统:GFS2, OCFS2(oracle)
    • 内核级分布式文件系统:ceph
    • Windows的文件系统:fat32(vfat), ntfs
    • Unix: FFS(fast), UFS(unix), JFS2
    • 交换文件系统:swap
    • 分布式文件系统: 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 (格式化)

    • mkfs.FSTYPE /dev/DEVICE:
      mkfs -t FS
      TYPE /dev/DEVICE

      • -t FSTYPE [DEVICE] { ext2 | ext3 | ext4…}

      mkfs -t FSTYPE = mkfs.FSTYPE
      mkfs -t ext4 = mkfs.FSTYPE

      • -L ‘LABEL’: 设定卷标
    • ext文件系统专用的管理工具:mke2fs

      • -t {ext2|ext3|ext4}:指定文件系统;
        -b {1024|2048|4096}:指定文件系统的块大小;
        -L ‘LABEL’:指明卷标
        -j: 相当于 -t ext3
        mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext
        -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 
      设定:e2label DEVICE LABEL

    • findfs :查找分区
      findfs [options] LABEL=<label>
      findfs [options] UUID=<uuid>

    • tune2fs:重新设定ext系列文件系统可调整的参数的值
      -l:查看指定文件系统超级块信息;super block

      • tune2fs -l DEVICE

      -L ‘LABEL’:修改卷标
      -m #:修预留给管理员的空间百分比
      -j: 将ext2升级为ext3
      -O: 文件系统属性启用或禁用, –O ^has_journal
      -o: 调整文件系统的默认挂载选项,–o ^acl | -o acl
      -U UUID: 修改UUID号
      注:块大小无法修改

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

    • 文件系统检测和修复:fsck、e2fsck

      • 文件系统检测和修复:常发生于死机或者非正常关机时,可能会造成文件损坏;此时,应该检测并修复文件系统;
        注意:一定不要在挂载状态下修复
      • fsck:File System Check 
        -t:FSTYPE 指明文件系统类型;
        fsck -t FSTYPE = fsck.FSTYPE
        -a:无需交互自动修复所有错误
        -r:交互式修复错误
        FSTYPE一定要与分区上已有文件类型相同

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

挂载

  • 挂载:将除根以外的文件系统与根文件系统上某现存的目录建立起关联关系,进而使得此目录做为其它文件访问入口的行为,此目录即为挂载点;
  • 卸载:为解除此关联关系的过程;umount
  • 挂载点:mount_point,用于作为另一个文件系统的访问入口;

    1. 事先存在
    2. 应该使用未被或不会被其他进程使用到的目录;
    3. 挂载点下原有的文件将会被隐藏;
    4. 挂载点目录一般为空
  • mount
    mount DEVICE MOUNT_POINT
    mount:通过查看/etc/mtab文件显示当前已挂载的所有设备
    mount [-fnrsvw] [-t vfstype] [-o options] device dir

    • 查看当前系统所有已挂载的设备: mount、cat /etc/mtab 、cat /proc/mounts;
    • 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:挂载点

      1. 事先存在;建议使用空目录
      2. 进程正在使用中的设备无法被卸载
    • 命令选项:

      • -t vsftype:(后需跟参数)指定要挂载的设备上的文件系统类型;多数情况下可省略,此时mount会通过blkid来判断要挂载的设备的文件系统类型;
        -r: readonly,只读挂载
        -w: read and write, 读写挂载
        -n: 默认情况下,设备挂载或卸载的操作会同步更新至/etc/mtab文件中;-n用于禁止此特性;
        -a:自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有auto功能)
        -L ‘LABEL’: 以LABEL指定要挂载设备
        -U ‘UUID’: 以UUID指定要挂载的设备
        -B, –bind: 绑定目录到另一个目录上
        查看内核追踪到的已挂载的所有设备:
        cat /proc/mounts
      • -o options:(挂载文件系统的选项),多个选项使用逗号分隔

        • options:
          nasync:异步模式
          sync:同步模式,内存更改时,同时写磁盘
          atime/noatime:(目录或文件)在被访问时是否更新其访问时间戳
          diratime/nodiratime:(目录)在被访问时是否更新其访问时间戳
          auto/noauto:是否支持自动挂载,是否支持-a选项
          exec/noexec:是否允许运行此设备上的程序文件
          dev/nodev:是否支持在此文件系统上使用设备文件
          suid/nosuid:是否允许程序上的suid和sgid特殊权限生效;no表示不允许
          remount:重新挂载
          ro:只读
          rw:读写
          user/nouser:是否允许普通用户挂载此设备,默认管理员才能挂载
          acl:启用此文件系统上的facl功能,默认不支持;

          1. mount -o acl device dir
          2. tune2fs -o acl device

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

    • 可以实现将目录绑定至另一个目录上,作为其临时访问入口;

      • mount –bind 源目录 目标目录
    • 挂载本地的回环设备(多挂载iso文件);

      • mount -o loop /PATH/TO/SOME_LOOP_FILE MOUNT_POINT
    • 移动介质

      • 挂载意味着使外来的文件系统看起来如同是主目录树的一部分
      • 访问前、介质必须被挂载
      • 摘除时,介质必须被卸载
      • 按照默认设置,非根用户只能挂载某些设备(光盘、DVD、软盘、USB等等);
        载点通常在/media 或/mnt下
    • 使用光盘

      • 光盘设备文件:IDE:/dev/hdc 、 SATA:/dev/sr0

      • 符号链接文件:/dev/cdrom 、/dev/cdrw、 /dev/dvd 、 /dev/dvdrw

      • 在图形环境下自动启动挂载/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、或类似的设备文件

      • 在图形环境中自动挂载

        1. 图标在[计算机]窗口中创建
        2. 挂载在/run/media/<user>/<label>
      • 手动挂载
        mount /dev/sdb1 /mnt

  • umount
    umount device | dir
    注:正在被进程访问到的挂载点无法被卸载

    • 查看挂载情况:
      findmnt MOUNT_POINT
    • 查看正在访问指定文件系统的进程:
      lsof MOUNTPOINT
      fuser -v MOUNT
      POINT
    • 终止所有在正访问指定的文件系统的进程:
      fuser -km MOUNT_POINT
    • 卸载:
      umount DEVICE
      umount MOUNT_POINT
  • /etc/fstab文件

    • 设定除根文件系统以外的其他文件系统能够在开机时自动挂载:/etc/fstab文件
      使用mount -a 命令挂载/etc/fstab中的所有支持挂载的设备

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

      要挂载的设备或伪文件系统
      挂载点
      文件系统类型
      挂载选项
      转储频率
      自检次序

      要挂载的设备或伪文件系统:
      设备文件、LABEL(LABEL=””)、UUID(UUID=””)、伪文件系统名称(proc,sysfs)
      挂载选项: defaults
      转储频率: 
      0:不做备份
      1:每天转储
      2:每隔一天转储
      自检次序: 
      0:不自检
      1:首先自检;一般只有rootfs才用1

  • 交换分区

    • Linux上的交换分区必须使用独立的文件系统;且文件系统的system ID必须为82;

    • 交换分区是系统RAM的补充
      基本设置包括:

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

    • 创建swap设备:mkswap命令

      • mkswap [OPTIONS] device
        -L LABLE :指明卷标
        -f : 强制
    • 启用:swapon

      • swapon [OPTION]… [DEVICE]
        -a:激活定义在/etc/fstab文件中的所有的交换分区;
        -p PRIORITY:指定优先级
        /etc/fstab:pri=value
    • 禁用:swapoff [OPTION]… [DEVICE]

    • swap优先级:可以指定swap分区0到32767的优先级,值越大优先级越高;如果用户没有指定,那么核心会自动给swap指定一个优先级,这个优先级从-1开始,每加入一个新的没有用户指定优先级的swap,会给这个优先级减一。

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

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

常见工具

  • 内存空间使用状态:

    • free [OPTION]
      -m: 以MB为单位
      -g: 以GB为单位
  • 查看挂载后的磁盘使用状态;文件系统空间占用等信息的查看工具:

    • df [OPTION]… [FILE]…

      • -l 只显示本地文件系统的相关信息
        -H 以1000为单位
        -T 文件系统类型
        -h: human-readable
        -i:显示inode的使用状态而非 blocks
        -P: 以Posix兼容的格式输出
  • 查看某目录总体空间占用状态:

    • du [OPTION]… DIR
      -h: human-readable
      -s: summary ;此目录的总的使用状态
  • dd

    • dd命令:在底层进行转换和复制文件
    • 用法:

    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
    block 转换一行数据为长度为 cbs 的记录,不足部分用空格填充。
    unblock 替代cbs长度的每一行尾的空格为新行
    lcase 把大写字符转换为小写字符
    ucase 把小写字符转换为大写字符
    nocreat 不创建输出文件
    noerror 出错时不停止
    notrunc 不截短输出文件
    sync 把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐

    • 磁盘拷贝
      dd if=/dev/sda of=/dev/sdb

    • 备份MBR:
      dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1

    • 破坏MBR中的bootloader:
      dd if=/dev/zero of=/dev/sda bs=64 count=1 seek=446

    • 备份:
      dd if=/dev/sdx of=/dev/sdy
      将本地的/dev/sdx整盘备份到/dev/sdy
      dd if=/dev/sdx of=/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 | dd of=/dev/sdx
      将压缩的备份文件恢复到指定盘

    • 拷贝内存资料到硬盘
      dd if=/dev/mem of=/root/mem.bin bs=1024
      将内存里的数据拷贝到root目录下的mem.bin文件

    • 从光盘拷贝iso镜像
      dd if=/dev/cdrom of=/root/cd.iso
      拷贝光盘数据到root文件夹下,并保存为cd.iso文件

    • 销毁磁盘数据
      dd if=/dev/urandom of=/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错误。当这种情况影响到硬盘的第一个扇区时,可能导致硬盘报废。上边的命令有可能使这些数据起死回生,且这个过程是安全高效的

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

(0)
ss
上一篇 2017-04-22
下一篇 2017-04-23

相关推荐

  • Linux中基础且常用的指令介绍及示例

    首先需要明确的是:Linux中无论是指令还是选项或者参数,请认真对待字母大小写。Linux中通用的命令使用方式是:命令 [选项] [参数] 1. pwd pwd:print name of current/working directory,即打印当前的目录(工作目录),光杆处于哪个目录下就会在终端上输出当前路径的绝对路径。用法示例: [lanti…

    Linux干货 2016-10-30
  • shell 脚本 之循环 for while until 和 软件包的管理 【上】

    shell 脚本 之循环 for while until 和 软件包的管理 【上】 循环执行     将某代码段重复运行多次     重复运行多少次:             循环次数事先已知    &nbsp…

    系统运维 2016-08-18
  • 从Linux小白到大牛——与狼共舞的日子2

    马哥教育网络班21期+第2周课程练习 1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。 cp:copy,复制文件 cp SRC DEST   SRC为文件     如果目录不存在:新建DEST,并将SRC中内容填充至DEST中     如果目…

    Linux干货 2016-07-17
  • 马哥教育网络班21期+第14周课程练习

    系统的INPUT和OUTPUT默认策略为DROP; iptables -P INPUT DROP iptables -P OUTPUT DROP 1、限制本地主机的web服务器在周一不允许访问;新请求的速率不能超过100个每秒;web服务器包含了admin字符串的页面不允许访问;web服务器仅允许响…

    Linux干货 2016-10-09
  • vim的使用

    本文主要讲述vim的使用 一.vim是什么? vim是一个十分著名也十分强大的编辑器,是vi的增强版,是一个模式化的编辑器,英文名称为 Visual Interface iMprove,在2000年2月Vim赢得了Slashdot Beanie的最佳开放源代码文本编辑器的美称。 二.vim的工作模式  (1)编辑模式:也叫命令模式,通过编辑命令实现…

    Linux干货 2016-10-29
  • Linux基础学习总结(二)

    经过前两周的学习,我们大家对于Linux系统和操作已经有了一定的认识。基于Linux平台进行开发,确实要更方便和高效,我经过自己的学习消化,现在将自己的理解的几点总结下来: Linux哲学思想的几句话,简洁的阐明了linux系统的特点。其中一切都是一个文件这句话特别精辟,在实际学习和操作linux系统之后,更是深刻体会到了这句话的内涵,感受颇深。它具体指明了…

    Linux干货 2018-03-16