zoukankan      html  css  js  c++  java
  • 十、mount挂载 fstab swap

    一.挂载和卸载文件系统

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

    根文件系统之外的其它文件系统要想能够被访问,都必须通过“关联”至根文件系统上的某个目录来实现,此关联操作即为“挂载”;此目录即为“挂载点”;


    挂载点:mount_point,用于作为另一个文件系统的访问入口;
    (1) 事先存在;
    (2) 应该使用未被或不会被其它进程使用到的目录;
    (3) 挂载点下原有的文件将会被隐藏;

    注意:1、一个挂载点同一时间只能挂一个设备!
          2、一个设备可以挂载在多个文件夹下,只不过看到的内容都是一样的
          3、挂载点最好是空文件夹,否则原来的文件会被暂时隐藏,直到被卸载后才会显现出来。

    1.1 mount

    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:挂载点
      • 事先存在;建议使用空目录
      • 进程正在使用中的设备无法被卸载

    补充:
    如何在不重启的情况下在虚拟机识别新增的硬盘
    echo "- - -" > /sys/class/scsi_host/host0/scan

    mount      # 通过查看/etc/mtab文件显示当前已挂载的所有设备,该文件自动更新,记载设备挂载情况
    mount  label=name   /data/mnt    # 用卷标挂载
    mount   UUID="e206a05c-e04e-400c-8081-01fa18e079d4"   /data/mnt   # 用UUID挂载,由于uuid稳定唯一,所以尽量用uuid去挂载
    
    # option:
        -t vsftype:指定要挂载的设备上的文件系统类型
        -r: readonly,只读挂载
        -w: read and write, 读写挂载
        -n: 不更新/etc/mtab,mount不可见 (cat /proc/mounts可见)
        -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功能 noacl:关闭acl功能 mount -o noacl,remount /dev/sdb1 /data/mnt loop: 使用loop设备 defaults:相当于rw, suid, dev, exec, auto, nouser, async findmnt MOUNT_POINT|device # 查看挂载情况,已经挂载显示相应挂载情况,无挂载则无输出;可用于写脚本 findmnt /data/mnt &> /dev/dull || mount /dev/sdb2 /data/mnt lsof MOUNT_POINT fuser -v MOUNT_POINT # 查看正在访问指定文件系统的进程 fuser -km MOUNT_POINT # 终止所有在正访问指定的文件系统的进程
    卸载
    umount DEVICE umount MOUNT_POINT # 卸载

    因此,mount命令可将将分区、文件夹(-B)、文件(loop) 都可以挂载在空文件夹上

    补充:loop设备,可以在文件系统中创建一个设备文件,该设备文件可以分区,可以挂载
    centos6 最多只能挂8个loop设备
    ls /dev/loop*
    但是,可以创建
    mknod /dev/loop8 b 7 8 centos6上创建第8个loop设备

    dd if=/dev/zero  of=/data/test_loop  bs=1M  count=500  # 创建loop设备
    mkfs.ext4  test_loop   # 格式化
    mount -o loop  test_loop  /data/mnt   # 挂载,centos6上需加-o loop选项,即我们实现了将一个文件挂载在文件夹上。

    二、 /etc/fstab

    fstab文件包含了你的电脑上的存储设备及其文件系统的信息。它是决定一个硬盘(分区)被怎样使用或者说整合到整个系统中的文件。具体来说:用fstab可以自动挂载各种文件系统格式的硬盘、分区、可移动设备和远程设备等。对于Windows与Linux双操作系统用户,用fstab挂载FAT格式和NTFS格式的分区,可以在Linux中共享windows系统下的资源。


    这个文件的全路径是/etc/fstab。它只是一个文本文件,你能够用你喜欢的编辑器打开它,但是必须是root用户才能编辑它。同时fsck、mount、umount的等命令都利用该程序。

    /etc/fstab 是启动时的配置文件,不过,实际 filesystem 的挂载是记录到 /etc/mtab 与 /proc/mounts 这两个文件当中的。每次我们在更动 filesystem 的挂载时,也会同时更动这两个文件喔!

    系统挂载的一些限制:
    
    •根目录 / 是必须挂载的﹐而且一定要先于其它 mount point 被挂载进来。
    •其它 mount point 必须为已创建的目录﹐可任意指定﹐但一定要遵守必须的系统目录架构原则
    •所有 mount point 在同一时间之内﹐只能挂载一次。
    •所有 partition 在同一时间之内﹐只能挂载一次。
    •如若进行卸除﹐您必须先将工作目录移到 mount point(及其子目录) 之外。

    我们挂载的命令执行结束后仅仅只是在内存在结束,一旦重启原来的挂载关系都不存在,所以我们要修改配置文件/etc/fstab来保存修改,这样才永久挂载

    该文件很重要,最好备份。

    如果出现故障

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

    1.设备文件

      LABEL:LABEL=""
      UUID:UUID=""
      伪文件系统名称:proc, sysfs
    2.挂载点
    3.文件系统类型
    4.挂载选项:defaults
    5.转储频率:0:不做备份 1:每天转储 2:每隔一天转储
    6.自检次序: 0:不自检 1:首先自检;一般只有rootfs才用1

    mount -a 无需重启,挂载/etc/fstab中的所有文件系统

    注意:对于loop、光盘、文件夹、一般在fatab中写设备名
    一些特殊挂载在/etc/fatab:

    补充:

    mknod - make block or character special files   # 创建特殊文件
    mknod  [OPTION]...  NAME  TYPE   [MAJOR MINOR]
    
    # type:
    b      # create a block (buffered) special file
    c, u   # create a character (unbuffered) special file
    
    
    mknod  zero  c 1 5  在 当前设备里创建zero文件,类似/dev/zero文件;注意,要提前cd至该设备的挂载目录里。
    ll /dev/zero  /data/zero
    crw-r--r--. 1 root root 1, 5 Dec 12 17:31 /data/zero
    crw-rw-rw-. 1 root root 1, 5 Dec 12 14:54 /dev/zero

    dd 命令:convert and copy a file

    用法: 

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

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

        count=# : 复制多少个bs 

    补充:

    简单删除一块磁盘的分区
    dd if=/dev/zero of=/dev/sdb bs=1 count=512

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

    破坏MBR中的bootloader:
    dd if=/dev/zero of=/dev/sda bs=256 count=1

    两个特殊设备:

      /dev/null:数据黑洞

      /dev/zero:吐零机

    三、swap分区一般为内存的2倍

    交换文件、交换分区,也叫虚拟内存,是系统RAM的补充
      swapon -s # 查看swap信息
    创建swap分区;
    第一步:fidisk 一个单独的分区,注意将分区类型改为82!
    第二步:makeswap 格式化
    第三步:修改/etc/fatab配置文件
    第四步:swapon -a 激活全部swap

    swapon  [OPTION]...  [DEVICE]  # 启用swap
        -a:激活所有的交换分区;
        -p PRIORITY:指定优先级
    禁用 :swapoff [OPTION]... [DEVICE]   # 禁用swap
    
    /etc/fstab文件中,可以在defaults后面跟pri=value 设置优先级,值越高优先级越高

    练习:
    1、根据挂载文件名查出该设备名称。
      blkid -U `grep /data /etc/fstab | sed -r "s/UUID=([^ ]*) .*/1/" `
      findfs `grep /data /etc/fstab | cut -d" " -f1 `

    实验1:修改/etc/fstab 中的uuid,可能导致无法启动,怎么修复
    1.根据提示,输入root的密码进入bash;
    2.在修改/etc/fstab 文件时会提示我们该文件为只读文件,无法修改。
    3.重新挂载/目录
      mount -o rw,remount /dev/sda2 / 重新挂载根目录
    4.再 vim /etc/fstab 修改配置文件,将最后两位修改为0 0即可。
    5.正常重启

    实验2:将一个文件夹迁移至一个新的磁盘分区,如将/home目录迁移至新的分区/dev/sdc1。

    为避免在cp过程中别的用户在修改/home,我们可以在操作cp前这么操作
    init 1 切换至单用户,也就是说别的终端不允许访问,只允许单用户终端访问,结束操作后再切回至init 5

    1 建立新分区
    2 建立文件系统
    3 mkdir /mnt/home
    mount /dev/sda6 /mnt/home
    4 cp -av /home/* /mnt/home
    5 tar cvf /app/home.tar /home
    scp remote
    6 init 1 断开网络,在远程不要执行
    7 rm -rf /home/*
    8 vim /etc/fstab
    UUID=b0421d9a-8072-4be5-9526-070535ac0a8e /home ext4 defaults 0 0
    9 mount -a
    umount /mnt/home
    10 init 5 还到原有模式

    注意:跟 “/” 目录无法迁移

    3.将CentOS6的CentOS-6.9-x86_64-bin-DVD1.iso和CentOS-6.9-x86_64-bin-DVD2.iso两个文件,合并成一个CentOS-6.9-x86_64-Everything.iso文件,并将其配置为yum源.

    首先现将两个光盘合成一个

    mkdir /data/centos6.9    创建一个空文件夹
    cp -av  /misc/cd/*   /data/centos6.9  # 将正在挂载这的光盘dvd1的内容复制进刚刚创建的centos6.9的空文件夹
    eject #将dvd1弹出
    
    再放入dvd2
    cp -av /misc/cd/*  /data/centos6.9  # 因为dvd1与dvd2有很多相同的文件,所以在cp前加表示使用cp的原命令,否则复制过程中每一个相同的文件都会提醒是否覆盖
    
    mkisofs -r -o  CentOS-6.9-x86_64-Everything.iso   /data/centos6.9  # 制作iso
    注意:制作的这个iso文件只能当yum源使用,无法作为系统启动光盘,如果要作为系统启动盘使用还需要去官网下载mkdvdiso脚本制作。
    
    然后挂载
    
    mount  -o loop  /data/ CentOS-6.9-x86_64-Everything.iso      /data/mnt
    
    修改配置文件/etc/yum.repo.d/base.repo
    最后
    
    yum clean all
    yum repolist 

    4.创建一个2G的文件系统,块大小为2048byte,预留1%可用空间,文件系统ext4,卷标为TEST,要求此分区开机后自动挂载至/test目录,且默认有acl挂载选项.

    fdisk  /dev/sdb   # 先分出一个2G的分区
    
    mke2fs  -t ext4  -m 1  -b 2048  -L test   /dev/sdb1     # 创建文件系统,块大小为2048byte,预留1%可用空间,文件系统ext4,卷标为TEST
    
    vim  /etc/fstab      # 修改配置文件
    UUID=cb17acad-ad9c-40b1-bab1-aa11a9ff9741 /test    ext4  defaults,acl  0 0    #添加此条
    
    mount  -a

    5.写一个脚本,完成如下功能:

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

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

    #!/bin/bash
    a=`lsblk -l | grep "sd[a-z]>"  |wc -l`
    b=`lsblk -l | grep "sd[a-z]>" |cut -d" " -f1  |head -n1`
    c=`lsblk -l | grep "sd[a-z]>" |cut -d" " -f1  |tail -n1`
    
    
    [ $a -eq 1 ]  && echo "`fdisk -l /dev/$b`"  || echo "`fdisk -l /dev/$c`"

    注意:跟 “/” 目录无法迁移

  • 相关阅读:
    《一带一路与黄河文明》:4星。用经济学角度与思维重新看明史。
    《谁动了我的网络资产》:4星。移动互联时代的软件使用技巧。
    《畅销的原理》:4星。关于判断与决策的研究的综述。
    《清明上河图密码4》:5星。严重剧透。依旧是细节+推理的双绝。隐隐看到有敌国的间谍盗窃经济地图、劫持手工业顶尖人才。
    《哈佛商业评论》2017年第5期:4星。成功CEO具有4种行为特质:果断、激励参与、主动适应、稳扎稳打。股东价值最大化的理念有重大缺陷。
    《屏幕上的聪明决策》:4星。人类在手机/电脑上做选择的心理学研究的综述。不流畅的文本有助于理解和记忆,淘汰赛制可以有效降低选择后懊悔。
    《三联生活周刊》2017年17期:3星。电子版阅读体验远超纸版。如果雄安的土地制度实验成功了,“北上广深”的房价也就被釜底抽薪了。
    《岁月凶猛》:3星。作者对人生与商业的感悟,商业圈内一些真实的故事。
    《神秘的镜像神经元》:2星。比较专业,许多内容看不懂。应该去学术期刊上发表观点而不是写成科普书向外行宣传。
    《拯救你的注意力》:4星。很多重要的领导力技能,包括情商、组织和战略思考能力都起源于对注意力的把控。
  • 原文地址:https://www.cnblogs.com/liuzhiyun/p/11345281.html
Copyright © 2011-2022 走看看