热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linux磁盘、文件系统管理文件系统的使用(挂载)

文件系统的使用(挂载)概述:挂载的相关概念★为什么要挂载磁盘的分区和格式化完成后,磁

文件系统的使用(挂载)

==============================================================================

概述:


==============================================================================

挂载的相关概念

为什么要挂载

  • 磁盘的分区和格式化完成后,磁盘要想能够使用,就需要挂载,在挂载某个分区前需要先建立一个挂载点。

相关概念:

首先要"挂载":mount 和 卸载 unmount 命令

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

挂载点:mount_point,作为另一个文件系统的访问入口

  • 事先存在;

  • 应该使用未被或不会被其他进程使用到的目录;

  • 挂载点下原有文件将会被临时隐藏;

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

  • 卸载时:可使用设备,也可以使用挂载点

mount命令

 1.简介:

挂载方法:

  • mount DEVICE MOUNT_POINT





二、mount命令

    挂载方法: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命令用法

   语法:mount [-nrw] [-t vfstype] [-o options] device dir

   命令选项:

        -r: readonly,只读挂载

技术分享

        -w: read and write, 读写挂载

        -n: 在默认情况下,设备挂载或卸载的操作同时会更新至/etc/mtab文件中,-n 用于禁此特性

        -t vsftype:指定要挂载的设备上的文件系统类型;多数情况下可省略,此时mount会通过blkid来判断要挂载的设备的文件系统的类型;

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

        -L ‘LABEL‘: 挂载时以卷标的方式指明挂载设备

  示例:

        mount -L LABEL dir

技术分享

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

         mount -U UUID dir

技术分享

      -B, --bind: 将目录绑定至另一个目录上,作为其临时访问入口

技术分享



-o options:(挂载文件系统的选项),多个选项使用逗号分隔

     async:异步模式

     sync:同步模式,内存更改时,同时写磁盘

     atime/noatime:文件或目录在被访问时是否更新其访问时间戳;

     diratime/nodiratime:目录在被访问是是否更新其访问时间戳

     auto/noauto:是否支持自动挂载,是否支持-a选项

     exec/noexec:是否允许运行此设备上的程序文件;

     dev/nodev:此设备上是否允许创建设备文件;

     suid/nosuid:是否允许程序文件上的suid和sgid特殊权限生效;

     remount:重新挂载

     ro:只读

     rw:读写

     user/nouser:是否允许普通用户挂载此设备,默认管理员才能挂载

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

            # mount -o acl device dir

            # tune2fs -o acl device

技术分享

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


查看当前系统已挂载的所有设备

      # mount

      # cat /etc/mtab

      # cat /proc/mounts


挂载光盘设备

1.光盘设备文件:

     IDE:/dev/hdc

     SATA:/dev/sr0

     符号链接文件

          /dev/cdrom,

          /dev/dvd

2.挂载方法:

     mount -r /dev/cdrom mount_point

3.把光盘制作成iso文件方法:

      使用cp命令直接备份就可

技术分享

     特殊用法:/misc

技术分享

挂载U盘:

     事先识别U盘的设备文件

挂载本地回环设备:

     # mount -o loop /PATH/TO/SOME_LOOP_FILE MOUNT_POINT


unmount命令

     正在被进程访问到的挂载点无法被卸载

     查看挂载情况:

          # findmnt MOUNT_POINT

     查看被那个或者哪些进程所占用:

          # lsof MOUNT_POINT

          # fuser -v MOUNT_POINT

技术分享

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

          # fuser -km MOUNT_POINT

技术分享

     卸载:

          # umount DEVICE

          # umount MOUNT_POINT

          # umount -l


技术分享



/etc/fstab 配置文件


1.设定除根文件系统以外的其他文件系统能够开机时自动挂载

2./etc/fstab每行定义一个要挂载的文件系统及相关属性

     6个字段:

         1)要挂载的设备

              设备文件;

               LABEL(LABEL="")

               UUID(UUID="")

               伪文件系统

         2)挂载点

               swap类型的设备的挂载点为swap;

         3)文件系统类型

         4)挂载选项

               defaults:使用默认挂载选项

               如果要同时指明多个挂载选项,彼此间逗号分隔;

         5)转储频率

               0:从不备份

               1:每天备份

               2:每隔一天备份

         6)自检次序

               0:不自检;

               1:首先自检,通常只能是根文件系统可用;

               2:次级自检

                 ...

3.mount -a:可自动挂载定义在此文件中的所支持自动挂载的设备

示例:

     在/etc/fstab配置文件中添加一行来挂载分区

技术分享

     使用命令 df或者mount可以查看挂载情况,要想生效执行 mount -a命令,自动挂载此文件中的所有支持自动挂载的设备

技术分享

    如果对挂载的参数修改,要重新生效使用 mount -o remount MOUNT_POINT

技术分享

技术分享


◎注意:/etc/fstab 设备名出错,自检非0,开机会导致无法启动

          排错方法:mount -o remount,rw /




四、处理swap交换文件和分区:

    swap,它类似于Windows的虚拟内存,分区时一般指定虚拟内存的大小为实际内存的2倍,如果你的实际内存超过了8G,那你划分16G给虚拟内存就足够日常交换了,如果真的遇到虚拟内存不够用的情况,就必须增加哦一个虚拟磁盘,因此我们不可能重新给磁盘分区,增加虚拟内存的基本思路:建立swapfile-->格式化swap格式-->启用虚拟磁盘。


交换分区是系统RAM的补充

1.基本设置包括:

    1)创建交换分区(fdisk -t 82)或者文件

    2)使用mkswap写入特殊签名

技术分享

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

技术分享

     4)使用swapon -a 激活交换空间

技术分享

2.挂载交换分区

 启用:swapon

        swapon[OPTION]... [DEVICE]

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

            -p PRIORITY:指定优先级

           /etc/fstab:pri=value

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

技术分享

总结:

swap的创建

  1)fdisk  -t 82 分区
    dd if=/dev/zero of=/swapfile bs=1M count=1024 文件
  2)mkswap /dev/sdc1
    mkswap /swapfile
  3)vim /etc/fstab
    /dev/sdc1   swap swap defaults,pri=100  0 0
    /swapfile swap swap pri=100  0 0
  4)swapon -s 查看swap分区
    swapon -a 读/etc/fstab 生效

   示例:创建swap文件增加虚拟内存

技术分享

技术分享

 心得

     既然可以把一个文件当做一个swap分区用,同样我们也可以创建一个文件当做分区使用,如果需要的话直接就可以把文件拷贝走,很方便。


swap的优先级

     用户可以给某个swap指定一个0到32767的优先级

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

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

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

技术分享



free命令内存空间及交换分区使用状态查看

    free [OPTION]

          -m: 以MB为单位

          -h:以人类适宜的方式查看

    Mem:物理内存的使用情况;

    Swap:交换分区的使用情况 ;

    -/+ buffers/cache:表示物理内存在不考虑缓存和缓存占据空间时的使用情况

技术分享

     buffers:缓冲,用来缓存写

     cache:  缓存,迎来缓存度

技术分享


df命令:查看磁盘设备的使用情况

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

          -l:仅显示本地文件的相关信息;

          -H 以1000为单位

          -T 文件系统类型

          -h: human-readable

          -i:显示inode的使用状态而非block

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

技术分享


du命令查看某个目录或文件所占空间的大小:

     du [OPTION]... DIR

          -h: human-readable

          -s: summary

技术分享

注意

du -h命令和ls -l 的区别

     ll-h 即为ls -lh是文件的实际大小;

     du -sh显示文件所占用的 block大小,并且,用du命令查看文件大小的时候,当文件只有1个字节,也会占用 4KB (linux默认是4k)(1K=1024Byte)

    示例如下:

技术分享

      文件大小在4K(一块)之上,两个命令显示的大小是相同的

技术分享


losetup命令

     可以把文件关联到一个设备,从而用设备名代替文件名

centos6 实现loop 设备和文件关联

   dd if=/dev/zero of=/testdir/bigfile bs=1M count=500

   losetup  /dev/loop7 /testdir/bigfile 

   mkfs.ext4 /testdir/bigfile

   mount /dev/loop7  /mnt/bigfile/ 

   losetup -a

示例:

    创建一个文件,对文件进行格式化挂载到另一个目录下

技术分享

技术分享

   下面是CentOS7版本的

技术分享

技术分享


dd命令:convert and copy a file

用法:

    dd if=/PATH/FROM/SRC of=/PATH/TO/DEST(if为指定源,of为目标文件)

    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 把小写字符转换为大写字符

     swab 交换输入的每对字节

     noerror 出错时不停止

     notrunc 不截短输出文件

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


1)磁盘拷贝

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

2)备份MBR

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

3)破坏MBR中的bootloader:

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

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

      #ddif=fileAof=fileBbs=1 count=128 skip=63 seek=31 cOnv=notrunc


1)备份:

      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工具进行压缩,保存到指定路径

2)恢复:

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

          将备份文件恢复到指定盘

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

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


1)拷贝内存资料到硬盘

    dd if=/dev/mem of=/root/mem.bin bs=1024

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

2)从光盘拷贝iso镜像

    dd if=/dev/cdrom of=/root/cd.iso

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

3)销毁磁盘数据

    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 if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file

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


两个特殊设备

   /dev/null:数据黑洞

  /dev/zero:吐零机


测试硬盘读写速度

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

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

    通过上两个命令输出的执行时间,可以计算出测试硬盘的读/写速度


修复硬盘

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

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





练习:

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

      1)创建一个5G的分区;

技术分享

    2)同步分区表,CentOS 7 中使用partprobe

技术分享

    3)格式化,创建文件ext4系统,并指明卷标、管理员预留空间、块大小

        # mkfs.ext4 -L TEST -b 2048  -m 1 /dev/sda6

技术分享

     4)开机自动挂载要写入/etc/fstab中 注意格式

技术分享

     5)执行mount -a 自动挂载  

技术分享

     6)验证是否有acl权限

技术分享

     2、写一个脚本,完成如下功能:

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

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

技术分享





心得:

一、要想创建一个文件系统并使用,必须要经过三步:

        分区,格式化创建文件系统,挂载

   1.系统分区时使用的命令是 fdisk ,注意命令选项,分区结束后输入 w 存盘退出,这是如果出现 wraning报警,说明要 同步内核分区列表,(CentOS 6 使用partx -a 或者partx -d --nr ;CentOS 7 使用partprobe 命令)

     2.格式化,创建文件系统

       这里要注意,创建文件系统的类型的命令,一般使用mkfs.命令即可,对于swap要使用mkswap命令,同时这些命令后可跟一些选项 -L 创建卷标,-b指定文件块大小,-m管理员预留空间等;

     3.挂载

       创建好的文件系统要想能够使用,就必须要挂载到根文件系统上的一个目录

       这里用到的命令就是:mount、swapon和umount

       注意命令的选项:mount -a,swapon -a(激活所有交换分区)

                           mount -o remount(重新挂载)

     4.配置文件/etc/fstab

        要想将开机自动挂载,就要将挂载写到配置文件中,这里注意书写的格式                      

二、常用命令:

1.fdisk 命令

    1)fdisk -[l] [device] 

      选项 -l 后面如果不加设备名称会直接列出系统中所有的磁盘设备以及分区表,加上设备名称会列出指定设备的分区表;  
  2)fdisk device

      不加 -l 选项,后面直接跟设备名,可以对该磁盘进行分区操作。

       这里注意分区时的一些选项:n,p,d,t,w

2.lsblk 命令

    列出块设备信息

3.partx 命令 和 partprobe 命令

    同步分区列表

4.tune2fs -l device 

    只针对ext系列文件系统,查看超级快信息 

5.blkid 命令

     块设备属性查看信息,可以查看设备的UUID,LABEL,文件类型

6.mount 命令

     1)不加任何选项可查看当前系统已挂载的所有分区、分区文件系统类型、挂载点及一些选项信息,同 cat /etc/mtab 和 cat /proc/mounts

     2)mount [设备名,label,uuid] [挂载点]

       注意相关的一些选项,-a,-r,-o remiount,等

7.free 命令

     物理内存空间及交换空间内存使用状态

     -h,-M

8.df 命令

     查看已挂磁盘的总容量、使用容量、剩余容量等

     可以不加任何参数,默认以KB为单位,选项:-h,-i,-H,-M

9.du 命令

     查看某个目录或者文件所占空间的大小

     -h ,-s






本文出自 “逐梦小涛” 博客,请务必保留此出处http://1992tao.blog.51cto.com/11606804/1900034


推荐阅读
  • 本文将从基础概念入手,详细探讨SpringMVC框架中DispatcherServlet如何通过HandlerMapping进行请求分发,以及其背后的源码实现细节。 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • 本文介绍了如何通过C#语言调用动态链接库(DLL)中的函数来实现IC卡的基本操作,包括初始化设备、设置密码模式、获取设备状态等,并详细展示了将TextBox中的数据写入IC卡的具体实现方法。 ... [详细]
  • 本文详细介绍了C++中的构造函数,包括其定义、特点以及如何通过构造函数进行对象的初始化。此外,还探讨了转换构造函数的概念及其在不同情境下的应用,以及如何避免不必要的隐式类型转换。 ... [详细]
  • 数据类型--char一、char1.1char占用2个字节char取值范围:【0~65535】char采用unicode编码方式char类型的字面量用单引号括起来char可以存储一 ... [详细]
  • 回顾两年前春节期间的一个个人项目,该项目原本计划参加竞赛,但最终作为练习项目完成。独自完成了从编码到UI设计的全部工作,尽管代码量不大,但仍有一定的参考价值。本文将详细介绍该项目的背景、功能及技术实现。 ... [详细]
  • importjava.io.*;importjava.util.*;publicclass五子棋游戏{staticintm1;staticintn1;staticfinalintS ... [详细]
  • 解决Visual Studio Code中PHP Intelephense误报问题
    PHP作为一种高度灵活的编程语言,其代码结构可能导致Intelephense插件在某些情况下报告不必要的错误或警告。自1.3.3版本起,Intelephense引入了多个配置选项,允许用户根据具体的工作环境和编程风格调整这些诊断信息的显示。 ... [详细]
  • 心理学经典:《思考致富》
    《思考致富》是由美国著名成功学大师拿破仑·希尔撰写的一部重要著作,该书基于希尔长达20年的深入研究和访谈,探讨了个人成功的核心要素。书中不仅揭示了成功的关键,还提供了一系列实用的方法和策略。 ... [详细]
  • 在处理大数据量的SQL分页查询时,通常需要执行两次查询来分别获取数据和总记录数。本文介绍了一种优化方法,通过单次查询同时返回分页数据和总记录数,从而提高查询效率。 ... [详细]
  • 本文通过一个具体的实例,介绍如何利用TensorFlow框架来计算神经网络模型在多分类任务中的Top-K准确率。代码中包含了随机种子设置、模拟预测结果生成、真实标签生成以及准确率计算等步骤。 ... [详细]
  • 嵌套列表的扁平化处理
    本文介绍了一种方法,用于遍历嵌套列表中的每个元素。如果元素是整数,则将其添加到结果数组中;如果元素是一个列表,则递归地遍历这个列表。此方法特别适用于处理复杂数据结构中的嵌套列表。 ... [详细]
  • 本文详细探讨了BCTF竞赛中窃密木马题目的解题策略,重点分析了该题目在漏洞挖掘与利用方面的技巧。 ... [详细]
  • 1#include2#defineM1000103#defineRGregister4#defineinf0x3f3f3f3f5usingnamespacestd;6boolrev ... [详细]
author-avatar
郭雪峰Rongeqw_983
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有