小红帽第8集

  |  

小红帽第8集:
文件系统挂载、ext文件系统及read命令、Linux RAID、lvm应用

文件系统挂载与管理工具

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

卸载:解除此关联关系的过程称之为卸载

把设备关联挂载点: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’

      (3)、UUID:-U ‘UUID’

      (4)、伪文件系统名称:proc,sysfs,devtmpfs,configfs等

    dir:挂载点

      要事先存在,建议使用空目录。注意:进程正在使用的设备无法被卸载

    常用选项:

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

      -r:readonly,以只读形式挂载

      -w:read and write 读写形式挂载

      -a:自动挂载所有支持自动挂载的设备(定义在了/etc/fstab)文件中,自动挂载选项中有“自动挂载”功能的文件系统。

      -n:挂载后不更新/etc/mtab文件

      -L ‘LABEL’:以卷标指定挂载设备

      -U ‘UUID’:以UUID指定要挂载的设备

      -B:绑定目录到另一个目录(有人说这个功能的作用是来弥补硬链接无法链接目录的缺点)

    查看内核追踪到的已挂载的所有设备:cat /proc/mounts

    -o options:挂载文件系统的选项

      async:异步模式

      sync:同步模式

      atime/noatime:包括目录和文件是否更新访问时间

      diratime/nodiratime:目录的访问时间戳

      auto/noauto:是否支持自动挂载

      exec/noexec:是否支持将文件系统上的应用程序运行为进程

      dev/nodev:是否支持在此文件系统上使用设备文件

      suid/nosuid:是否支持suid

      remount:重新挂载    mount -o remount,ro /dev/sda3

      ro:只读形式挂载

      rw:读写挂载

      usr/nouser:是否允许普通用户挂载此设备

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

      注意:上述选项可多个同时使用,彼此使用逗号分隔

        默认挂载选项:defaults

          Use default options: rw, suid, dev, exec, auto, nouser, and async.

  卸载命令:

    # umount DEVICE

    # umount MOUNT_POINT

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

      fuser -v MOUNT_POINT

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

      fuser -km MOUNT_POINT

  挂载交换分区:

    启用:swapon

      swapon [OPTION]…[DEVICE]

        -a:将/etc/fstab文件中所有设置为swap的设备,启动为交换区

        -p:<优先顺序>:指定交换区的优先顺序;即指定优先使用那个交换分区

    禁用:swapoff

  查看内存空间的使用状态:

    free [OPTION]

      -m:以MB为单位

      -g:以GB为单位

      -h:以符合人类习惯的方式显示

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

    df

      -h:human readable

      -i:inodes instead of blocks

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

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

    du

      -h:human readable

      -s:summary

ext文件系统原理基础及read命令

文件挂载的配置文件:/etc/fstab

  每行定义一个要挂载的文件系统,其内容格式如下:

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

  要挂在的设备或伪文件系统:

    设备文件、LABEL(LABEL=’ ‘)、UUID(UUID=’ ‘)、伪文件系统名称(proc,sysfs)

  挂载点:

    即为你要挂载的位置

  文件系统类型:

    指明该挂载文件系统的类型,文件类型必须准确

  挂载选项:

    一般就以默认选项进行挂载即可:即defaults

  转储频率:

    0:不做备份

    1:每天转储

    2:每隔一天转储

    该选项基本都为不做备份,因为对于数据的备份会有很多其它好用的工具

  自检次序:

    0:不自检

    1:首先自检,一般只有rootfs才会使用1

    2…9:都可以使用

文件系统上的其它概念:

  Inode:Index Node索引节点

  链接文件:

    硬链接:

      不能对目录进行,防止循环引用、

      不能跨分区进行,这个很好理解

      指向同一个inode的多个不同的路径,创建文件的硬链接即为为inode创建新的引用路径,因此会增加其引用计数。

      创建硬链接的方式:

        ln SRC DEST

          -v:verbose

    符号链接:

      可以对目录进行

      还可以跨分区,就类似windows的快捷方式

      指向的是另一个文件的路径,其大小为指向的路径,字符串的长度,不增加或减少目标文件inode的引用计数。

      创建软连接的方式:

        ln -s SRC DEST

          -v:verbose

练习:写一个脚本,完成如下功能

  (1)、列出当前系统识别到的所有磁盘设备

  (2)、如果磁盘数量为1,则显示其空间使用信息,否则,显示最后一个磁盘上的空间使用信息

#!/bin/bash
#by zhangshuo 2018/08/10
[ ! $UID -eq 0 ] && echo "not root" && exit 2

DiskNumber=$(fdisk -l | grep -o "^Disk /dev/[sh]d[a-z]" | cut -d " " -f 2 | wc -l)

echo "your disk number is $DiskNumber"

if [ $DiskNumber -eq 1 ];then
fistdisk=$(fdisk -l | grep -o "^Disk /dev/[sh]d[a-z]" | cut -d " " -f 2)
echo "you only have one disk is $fistdisk"
echo "the disk used is ..."
df -h $fistdisk
else
lastdisk=$(fdisk -l | grep -o "^Disk /dev/[sh]d[a-z]" | cut -d " " -f 2 | tail -1)
echo "the last disk is $lastdisk"
echo "the disk used is ..."
df -h $lastdisk
fi

  这里在付一个创建脚本的脚本,这样很多重复的内容就可以不用每次书写了:

#!/bin/bash
#by zhangshuo 2018/08/10

[ $# -eq 0 ] && echo "no scripts name" && exit 2

echo "#!/bin/bash
#Version:0.0.1
#Author:zhangshuo
#Date:$(date +%F)
#Description:
#BUG REPORTS:2292650292@qq.com" >> $1

chmod +x $1

bash脚本编程之用户交互

  read [OPTIONS] …[name]

    -p “PROMPT” :给定提示信息

    -t “TIMEOUT” :给定超时时间

bash程序调试运行用法

  检测脚本中是否有语法错误:

    bash -n /path/to/some_script

  调试执行,输出每一步执行的详细信息:

    bash -x /path/to/some_script

练习:

  接受用户给定的一个磁盘,然后输出磁盘的分区信息

#!/bin/bash
#by zhangshuo 2018/08/10

[ ! $UID -eq 0 ] && echo "not root" && exit 2

DiskNumber=$(fdisk -l | grep -o "^Disk /dev/[sh]d[a-z]" | cut -d " " -f 2 | wc -l)

echo "your disk number is $DiskNumber"
echo "your all disk is :"
fdisk -l | grep -o "^Disk /dev/[sh]d[a-z]" | cut -d " " -f 2

read -p "enter a disk:" diskname

[ -z "$diskname" ] && echo "no disk name" && exit 2

if fdisk -l | grep "^Disk $diskname" &> /dev/null;then
echo "the $diskname mesages is :"
fdisk -l $diskname
else
echo "no such disk"
fi

  

Linux RAID

RAID:Redundant Arrays of Independent Disks 独立冗余磁盘阵列

  优点:磁盘并行读写,有的硬件RAID设备自带内存和CPU,提高IO能力,提高耐用性,和数据的安全性,该方式是通过磁盘冗余来实现的。

  级别:级别不同意味这多块磁盘组织在一起的工作方式有所不同

  RAID实现的方式:

    外接式磁盘阵列:通过扩展卡提供适配能力

    内接式RAID:主板集成RAID控制器

    软件模拟RAID:该方式会额外浪费CPU的资源,而且该种方式数据丢失时不易恢复

  常用RAID级别:

    RAID0:

      条带化方式,即将数据按chunk大小进行切割之后,按规则分别存储在两个硬盘之上

    RAID1:

      镜像的方式,即将数据在两个硬盘上各存一份,来实现数据的冗余

    RAID4:

      在条带的基础上,增加一块校验盘来存放其它条带的异或校验码

    RAID5:

      在RAID4的基础上,校验盘不是固定的某个盘而是所有盘轮流做校验盘,这样可以均衡负载

    RAID6:

      在RAID5的基础上,增加一块校验盘,来保证数据的可靠性

    RAID10:

      结合RAID0和RAID1,先做镜像之后再做条带,这种方式比较常用

    RAID01

      结合RAID0和RAID1,先做条带之后在做镜像。

读写性能 可用空间 容错能力 最少磁盘
RAID0 提升 N*min(s1,s2…) 2
RAID1 读提升写下降 1*min(s1,s2…) 2
RAID4 提升 (N-1)*min(s1,s2…) 3
RAID5 提升 (N-1)*min(s1,s2…) 3
RAID6 提升 (N-2)*min(s1,s2…) 4
RAID10 提升 N*min(s1,s2…)/2 4
RAID01 提升 N*min(s1,s2…)/2 4

  JBOD:Just a Bonch of Disks

    功能:将多块磁盘空间合并为一个大的连续空间使用

    可用空间:sum(s1,s2…)

  Centos上的软件RAID的实现

    结合内核中的md模块(multi devices)

    mdadm:将任何块设备做成RAID

    模式化的命令:

      创建模式

        -C

          专用选项

            -l:级别

            -n:设备个数

            -a (yes no):自动为其创建设备文件

            -c:chunk大小即数据块大小 默认为64k

            -x: 指定空闲盘个数

      管理模式

        –add,–remove,-fail

        mdadm /dev/md# –fail /dev/sdb7 模拟将/dev/sdb7进行损坏

        mdadm /dev/md1 -f /dev/sdb7 模拟硬盘损毁

        mdadm /dev/md1 -r /dev/sdb7   卸载坏的硬盘

        mdadm /dev/md1 -a /dev/sdb7   增加一块好的硬盘到raid

      监控模式

        -F

      增长模式

        -G

      装配模式

        -A

  创建2G的RAID0

    可以使用4个512MB的磁盘。也可以使用2个1G的磁盘

    创建RAID0   mdadm -C /dev/md0 -a yes -l 0 -n 2 /dev/sdb{5,6}

  查看当前设备上的所有RAID  cat /proc/mdstat

  创建2G的RAID1

    因为RAID1为镜像,最少使用两个磁盘,所以这里使用2个2G的磁盘来制作

    创建RAID1   mdadm -C /dev/md0 -a yes -l 1 -n 2 /dev/sdb{5,6}

  查看磁盘阵列的详细信息

    mdadm -D /dev/md1

  停用阵列:

    mdadm -S /dev/md#

      –stop

  启动阵列

    mdadm -A /dev/md#

  完整删除RAID信息

    1、查看RAID磁盘阵列信息,确认一下要关闭哪个。如:关闭md0这个阵列

      cat /proc/mdstat

    2、卸载md0这个阵列的挂载点

      umount /mnt/RAID5

    3、停止md0这个阵列,并释放与该阵列相关的所有资

      mdadm -S /dev/md0

    4、清除成员磁盘当中阵列的超级块信息,这一步很重要!

      mdadm –zero-superblock /dev/sdb[1-3,5]

    5、删除或注释/etc/fstab上的挂载信息

    6、删除或注释/etc/mdadm.conf对应的RAID信息
  

  watch:周期性的执行命令,并以全屏方式显示结果

    -n #:指定周期长度,单位为秒,默认为2

    watch -n # ‘COMMAND’

  将raid信息保存至文件以后便可开机装配

    mdadm -D –scan > /etc/mdadm.conf

  mke2fs -E stride 16 :格式化时指定条带大小这样可以提高raid性能。chuck大小默认为64k 磁盘块大小为4k所以这里数字为16.注意用优盘做raid时它的chunk大小为512k。

  lsmod:显示已经加载到内核中的模块状态信息

  mdadm:用户空间工具只是管理工具,对于raid其实还是内核中raid模块进行的管理。

LVM应用

  LVM:Logical Volume Manager

  dm:Device Mapper,将一个或多个底层块设备组织成一个逻辑设备的模块

  在Centos中对于逻辑卷的设备表示方法有三种:

    /dev/mapper/VG_name-LV_name

    /dev/VG_name/LV_name

    /dev/dm-#

    但是所有的表示方法都最终指向了/dev/dm-#

[root@localhost ~]# ll /dev/mapper/*
lrwxrwxrwx. 1 root root 7 Aug 11 10:00 /dev/mapper/centos-home -> ../dm-2
lrwxrwxrwx. 1 root root 7 Aug 11 10:00 /dev/mapper/centos-root -> ../dm-0
lrwxrwxrwx. 1 root root 7 Aug 11 10:00 /dev/mapper/centos-swap -> ../dm-1
crw-------. 1 root root 10, 236 Aug 11 10:00 /dev/mapper/control
[root@localhost ~]# ll /dev/centos/*
lrwxrwxrwx. 1 root root 7 Aug 11 10:00 /dev/centos/home -> ../dm-2
lrwxrwxrwx. 1 root root 7 Aug 11 10:00 /dev/centos/root -> ../dm-0
lrwxrwxrwx. 1 root root 7 Aug 11 10:00 /dev/centos/swap -> ../dm-1
[root@localhost ~]# ll /dev/dm*
brw-rw----. 1 root disk 253, 0 Aug 11 10:00 /dev/dm-0
brw-rw----. 1 root disk 253, 1 Aug 11 10:00 /dev/dm-1
brw-rw----. 1 root disk 253, 2 Aug 11 10:00 /dev/dm-2

  注意:逻辑卷的快照必须和逻辑卷在同一个卷组中切必须留有足够的空间给快照卷

    将物理卷加入到卷组中时会给物理卷分块类似chunk此时的块叫做pe:physical extend 物理盘区 既逻辑存储单位

    将pe放到逻辑卷中,即逻辑卷的存储空间是由若干个pe组成的。此时的pe叫做le:logical extend 逻辑盘区

  physical volume pv:物理卷

    pvcreate,pvremove,pvscan,pvdisplay,pvmove

      例如:pvcreate /dev/sdb{11,12}

    pvs :查看当前系统的pv

    pvdisplay

  volume group vg:卷组类似扩展分区

    vgcreate,vgremove,vgextend,vgreduce,vgs,vgdisplay,vgscan

    vgs:显示所有vg

    vgcreate:创建卷组

      -s:可以指定pe大小默认为4m 该选项可以带单位用时man一下

      例如:vgcreate myvg /dev/sdb{11,12}

    vgremove vg_name :移除该vg

    vgcreat VG_NAME  /PATH/TO/PV

      -s #:PE大小,默认为4MB

      例如:vgcreate -s 8M myvg /dev/sdb{11,12}

  缩小一个vg的过程

    1、pvmove 移除一个pv该过程会自动复制数据

      pvmove /dev/sdb12

    2、vgreduce myvg /dev/sdb12

    3、pvremove 真正移除pv

  增加一个vg的过程

    1、pvcreate /dev/sdb12

    2、vgextend myvg /dev/sdb12

  logical volume:逻辑卷

    lvcreate,lvremove,lvextend,lvreduce,lvresize,lvs,lvdisplay

    lvs:列出所有逻辑卷

    lvcreate -n LV_NAME -L #G VG_NAME

    lv创建好以后其设备目录为/dev/vgname/lvname,但是其实真正的lv设备是在/dev/mapper下面

  删除一个lv

  1、卸载

    umount /run/media/zhangshuo/vg0/

  2、删除

    lvremove /dev/myvg/testlv

  练习:创建一个由两个物理卷组成的大小为20G的卷组myvg,要求其PE大小为16M,而后在此卷组中创建一个大小为5G的逻辑卷lv1,此逻辑卷要能在开机后自动挂载至/users目录,且支持ACL功能

  扩展逻辑卷的过程:

    lvextend :扩展其物理边界

      -L [+]# /PATH/TO/LV

    resize2fs :扩展其文件系统边界

    resize2fs /PATH/TO/LV 5G 修复逻辑边界到5g

    resize2fs -p /PATH/TO/LV 扩展至最大

  缩减逻辑卷的过程:

    注意:

      1、不能在线缩减,要先卸载再缩减

      2、确保缩减后的空间大小依然能存储原有的所有数据

      3、在缩减之间应线强行检查文件,以确保文件系统处于一致性状态:

    1、df -lh 确保大小足够

    2、umount  卸载挂载

    3、e2fsck -f /PATH/TO/LV  检查文件系统

    4、resize2fs

      resize2fs /PATH/TO/PV  3G 缩小至3G

    5、lvreduce -L [-]# /PATH/TO/LV

    6、重新挂载

  快照卷

    注意:

      1、生命周期为整个数据时常:在这段时常内,数据的增长量不能超出快照卷大小:

      2、快照卷应该是只读的

      3、跟原卷在同一卷组内

  lvcreate

    -s :指定为快照卷

    -p r|w 指定权限,一般快照用于数据备份使用所以快照卷不允许修改所以应该为只读

      lvcreate -L # -n SLV_NAME -s -p r /PATH/TO/LV

文件系统的挂载使用

挂载光盘设备:

  光盘设备文件:

    IDE接口的:/dev/hdc

    SATA接口的:/dev/sr0

    符号链接文件:

      /dev/cdrom

      /dev/cdrw

      /dev/dvd

      /dev/dvdrw

    例如:

      mount -r /dev/cdrom /media/cdrom :以只读方式挂载光盘至/media/cdrom下

dd命令:convert and copy a file

  用法:dd if=/PATH/FROM/SRC of=/PATH/TO/DEST

    bs=# 复制的块大小,默认单位为字节

    count=# 要复制多少个bs

  比如:

    完全复制一个磁盘到另一个磁盘时:

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

    备份磁盘的MBR信息:

      dd if=/dev/sda of=/tmp/mbr.bk bs=512 count=1

    清除MBR分区表:

      dd if=/dev/zero of=/dev/sda bs=512 count=1

    破坏MBR中的bootloader

      dd if=/dev/zero of=/dev/sda bs=256 count=1

    制作linux或是windows启动盘时:

      dd if=/PATH/TO/linux.iso of=/dev/sdb bs=4M

-EOF

文章目录
  1. 1. 文件系统挂载与管理工具
  2. 2. ext文件系统原理基础及read命令
  3. 3. Linux RAID
  4. 4. LVM应用
  5. 5. 文件系统的挂载使用
, , 本站文章总字数: 40.5k