第三十四讲——文件系统的挂载 我们要知道一点,linux操作系统没有写入配置文件的操作都是临时生效,重启后之前的操作不生效。所以,我们使用mount命令挂载的文件系统,在系统重启之后不会自动挂载,系统在开机的时候,内核会分析/etc/fstab这个表,并将写入这张表中的设备自动挂载起来。 我们使用df –h 可以看到当前操作系统已经挂载的设备。 在/etc/fstab文件中一共有六个字段 第一个字段:设备(要挂载的设备) 可以使用卷标来指定,也可以使用设备文件来指定,还可以通过UUID进行指定 第二个字段:设备的挂载点,设备的挂载点必须是目录,如果挂载之前目录中有文件存在,则目录中的文件会暂时隐藏。 第三个字段:文件系统类型,格式化为什么类型就是什么类型 第四个字段:挂载选项,默认为defaults(defaults为mount命令中的复合命令。)若文件系统要开启acl权限,则要在此处声明,默认是不开启acl权限的。如果要开启acl,在defaults,acl (中间使用逗号隔开) 第五个字段:转储频率,转储频率和文件系统的备份相关,备份有完全备份和增量备份,转储频率用于定义文件系统多少天做一次完全备份。 0 为不备份 1 每天都做一次完全备份 2 两天一次完全备份 一般来讲,我们自己添加的文件系统都不备份,设置为零 第六个字段:文件系统开机时文件系统的检测顺序,一般来说,只有根为1,其他都可以为2(同时进行),0 表示不检查。 文件系统挂载要求: 挂载目录存在 挂载目录没有其他进程使用 如果目录中有文件,则挂载文件系统后,原目录中的文件会被隐藏。 挂载成功后需要通过挂载点访问对应的文件系统。 mount 命令的用法: mount [option] [-o option] DEVICE MOUNT_POINT [option] 为mount的选项。 [-o option] 为挂载文件系统的功能选项。 mount -a 挂载定义在/etc/fstab中的所有文件系统。 mount 不加任何参数时,可以查看当前系统中挂载的所有文件系统(mount命令是查看/etc/mtab中的信息),当我们挂载成功一个设备的时候,会自动保存在/etc/mtab文件中,如果我们在挂载是可以指定不将信息写入文件则文件中就不会存在设备的挂载信息。 mount /dev/[sh]d[a-z]# 挂载点 也可以使用卷标,或者UUID挂载文件系统。 -t 指定文件系统类型,大多情况下会调用blkid命令获取对应的文件系统类型。 -r 只读挂载(挂载光盘的常用选项) -p 读写挂载(一般都为读写挂载) –n 挂载时不将信息写入/etc/mtab文件。 -o 指定额外的挂载选项,即指定文件系统启用的属性。 async 异步写入(这个概念很重要),为默认的挂载选项。CPU对数据操作是先将数据加载进内存,并将数据保存在内存中,再写入磁盘,这个过程称为异步写入。一般来说,次哦按都为异步写入。 defaults (/dev/fstab中定义的选项)defaults包含很多其他的默认的选项,是一个选项的集合。 defaults中默认的选项为: dev:如果挂载设备上有设备文件是否启用(允许),也就是说,被挂载的文件系统中存在挂载点,或者设备文件。 exec:允许这个分区上具有可执行权限的可执行文件运行起来,挂载U盘时可使用noexec不启用,这样可以避免绝大部分的U盘病毒。 async 异步写入。 -o选项下的其他选项: _netdev: 如果一个网络设备连接不上可自行跳过,这个在网络文件系统中非常有用,因为linux操作系统当挂载不上网络文件系统,会一直尝试,直至挂载成功。 remount 重新挂载当前文件系统(先卸载,再挂载) ro(read only):挂载为只读 sync 同步写入 suid:一定不要给外来设备启用SUID,使用nosuid不启用,危险操作。 atime:每访问一次就更改其时间戳,但是这是相当耗费I/O资源的。在服务器被频繁访问时,atime无意义,所以关闭:noatime 在使用-o 下的多个选项的时候,使用逗号将每个选项分隔开。 很多时候我们会遇到一个设备无法卸载,说这个设备正忙,有时候就会很头疼,忙啥忙啊,能不能愉快的玩耍了? fuser –v 设备文件 当一个设备正在使用中无法卸载时 -v 查看文件上有哪个进程正在使用 -k 将正在访问文件的进程杀掉 -m 如果是一个挂载点的话-k需要加-m选项。 fuser -km /mnt/yum 将挂载点上正在访问的进程结束,这就意味着将访问用户的bash结束,此用户将被踢出操作系统。 给自己讲linux 2017-01-03 评论 1529 次浏览
第三十三讲——文件系统的格式化 我们怎么知道当前操作系统内核支持什么文件系统? cat /proc/filesystems 可以查看当前操作系统支持的文件系统,实际上远远不止这些,由于内核编译时可能没有选择将文件系统编译,就需要重新编译内核或者使用第三方的软件来支持文件系统。 我们在给一个分区上创建文件系统的时候,它会把分区中5%的block预留给root用户,一旦当分区填满之后,管理员做一些修复工作时还会有多余的空间可用,对于一个大的分区来说,5%的预留是非常浪费的,一般来说预留1G的空间就足够了,因此百分比是比较粗糙的,将来我们可以知自己指定。 我们在格式化一个分区的时候会显很多的信息,例如有多少个块,有多少块组,每个块组中有多少个块,每个块组中有多少inode,块大小等等。 我们通过比对可以发现,我们默认的块大小为4K,块的个数大约是inode个数的两倍,所以可以推算出来大概每两个块一个inode,我们还可以看到super block以及super block备份到了哪些磁盘块上。 在日志文件系统中我们还可以看到有一个journal(日志)空间的创建。 mkfs命令对分区进行格式化,我们使用which mkfs可以发现mkfs是一个独立的命令,但是我们使用-t指定文件系统类型的时候会调用其他程序,例如: mkfs –t ext2 = mkfs.ext2 mkfs –t ext3 = mkfs.ext3 我们指定文件系统类型后调用的是后面的命令。除了ext系列的文件系统,mkfs是用于所有内核支持的文件系统,mkfs –t vfat 创建一个fat32格式的文件系统。 任何内核支持的文件系统都可以通过mkfs来进行指定文件系统的类型。但是如果我们要专门管理ext系列的文件系统,我们还有一个专门的命令:mke2fs mke2fs /dev/不跟任何参数时,默认创建的是ext2文件系统 mke2fs –j 创建为ext3文件系统 mkse2fs –t ext2/ext3/ext4 -t选项可指定文件系统 -b 指定blocksize的大小,默认为4096字节,-b可用的取值为1024/2048/4096. -L 指定文件系统的卷标(分区的名称),指定卷标的好处是,如果系统上同时挂载了SATA、SCSI、USB等硬盘设备,挂载之后重启时内核对其识别的顺序可能不一样,也就是说设备名称乱掉了,但是哟了卷标之后,我们直接使用卷标访问,或者使用卷标进行自动挂载都是可以的,卷标还可以通过其他命令重新指定、修修改。 -m # 指定预留给超级用户的 -i 指定字节同inode的比率,也就是说,给多少个块创建一个inode,默认为8K,字节数应当为块的倍数 -N 指定要创建的inode的个数 -F 强制格式化,当一个文件系统处于挂载状态是不允许格式化(创建文件系统的),若需要格式化,可以使用-F选项。 -E 用指定额外的文件系统属性 blkid 命令,查看查看磁盘分区相关属性。用于显示block设备的属性,或者定位block属性。 UUID:全局的统一标识符,UUID是由操作系统命令自动生成的一串随机数,用于唯一标识磁盘。 TYPE:文件系统的类型 在磁盘设备非常多的情况下,使用UUID来标识唯一的文件系统,在有的分区上会看到 SEC_TYPE=”ext2” :安全类型为ext2 TYPE=”ext3”:实际类型为ext3 blkid命令还可以用于查看卷标。 对于ext系列的文件系统,还有专门的命令用于修改卷标 e2label /dev/sd[a-z]# LABEL 指定的设备文件 指定卷标 调整文件系统属性(无损数据进行调整) 将ext2 升级为ext3 tune2fs -j /dev/sd[a-z]# 将文件系统加上日志功能,创建为ext3,不损害原数据,将ext2升级为ext3. 对文件系统的降级是不可以的,但是我们可以不启用日志功能。 块大小接近物理属性,不能更改 tune2fs 还能够调整文件系统信息。 -L 用于设定卷标(或修改) -m 调整管理员预留百分比 -r 指定预留块数(不能同-m一起使用) -o 设定默认挂载选项 -c 指定达到多少次挂载次数自检 0或者-1 表示不自检(关闭自检功能) -i 指定每挂载使用多少天自检 0或者-1 表示不自检(关闭自检功能) -l 显示超级块中的信息(当前分区中super block里的信息) acl,挂载时如果不指定acl,文件系统时不支持acl的。 我们默认安装文件系统的时候,文件系统是有自检设置的,按挂载次数和挂载天数自检,如果我们数据库很庞大,文件系统突然启动自检,会发现磁盘I/O被自检大量占用,正常访问都无法进行。 tune2fs –l /dev/sd[a-z]# 显示超级块中的信息。 其中filesystem state状态为clean则不需要修复。 dumpe2fs /dev/sd[a-z]# 显示文件的属性信息,相当详细,除了super block中的信息,还有块组的信息,以及超级块的备份位置等等。 super block一般在0.1.3.5.7.9组中有备份, dumpe2fs –h /dev/sd[a-z]# 只是查看分区中超级块的信息。 如果文件系统出现了错误应当自检,如果不自检,可以手动检查。 fsck 检查并修复文件系统,不指定文件系统是,fsck会通过blkid命令识别文件系统类型。 -t 指定文件系统类型 -a 自动修复(不询问) 如果不指定-a选项,会询问是否修复。 e2fsck 专用修复ext系列文件系统 -f 强制检测 -a(-p) 自动修复,-a为了兼容fsck命令。 fsck与mkfs对于不同的文件系统都适用。 给自己讲linux 2017-01-02 评论 1568 次浏览
第三十二讲——磁盘的分区 磁盘的分区命令:fdisk fdisk /dev/sda 会产生一个交互式界面 m:帮助信息 p: 显示分区信息 n:新建磁盘分区 d:删除磁盘分区 w:保存并退出 q:不保存退出 l: 查看文件系统类型 t:修改文件系统类型 在此选项下也可使用l/L查看支持的文件系统类型 新建分区时指定起始柱面。一般为默认即可 结束柱面的指定,一般使用大小指定,单位为M、G 建立好一个分区时,系统内核并不会立即识别,我们需要通知内核联系当前系统上的所有磁盘 partx /dev/sda 也可指定某一磁盘 partprobe 老版本的命令 更新内核识别后我们可以查看/proc/partitions cat /proc/partitions 会列出当前内核识别的分区 任何一个分区想要使用都要创建文件系统,要想创建文件系统就意味着,我们要利用内核中内核的文件系统模块,在对应的设备上划分出组织结构。 swap分区 在早期内存算是一种比较昂贵的资源,在此场景下物理内存无法满足我们的需要。 我们的操作系统内核是一个虚拟机,它将我们底层硬件所提供的计算能力虚拟成接口,能够让多个进程并行运行。将资源通过分时共享:time share,或者多路复用:matiplex,将资源分成几份,然后每个进程都可以使用一份。 CPU的虚拟,将CPU的计算能力划分成时间片,time slice。CPU所提供的计算能力是按照时间的流逝来完成的。 I/O设备是通过多路复用来完成 X86系列CPU上(32位),尤其是从80286开始,我们的内存当中引入了所谓的虚拟地址的概念,也称为线性地址、内存就是可编址的存储单元,所以进程在访问内存设备的时候,我们内存中的存储空间每一个字节被称为一个cell(存储单元,存储格),每一个存储格都是由地址的,所以CPU到内存中访问数据时是根据地址来查找的。 地址总线就是负责寻址的,CPU通过地址总线能够找到对应地址的存储单元,而后通过数据总线将数据读取出来,(读取数据是在控制指令的控制下完成数据读取的。),进程是跑在内核之上的,虽然线性空间是4G(32位CPU),但内核会占用一部分,这就意味着进程并不能直接使用4G,而是划分为两段,这个地址空间是虚拟出来的,假的、不存在的,真正的数据还是存放在物理内存当中,虽然出去内核占用的空间,进程都能够使用,但并不代表进程会完全占用整个剩余空间(进程管理),大多数进程空间是分页的(页框,page)。 在物理内存上,内存空间被分成一个一个的页框,每4K一个页框,可以放一个页面的数据,而后每一个进程真正使用的数据会被转换映射到内存空间中去。 数据在物理内存空间中很可能是不连续的,数据是交替存放的。 虚拟地址是假的,每一个进程都以为自己使用了全部的地址空间,而事实上由内核将虚拟地址空间转换到物理内存当中。 进程在虚拟地址上上是看不到其他进程的存在的。万一物理内存中没有页框了,但是进程还需要使用内存,进程是意识不到内存快占满了,进程会继续向内核申请地址空间来装数据。这个时候内核会采取折中的办法,将硬盘中的虚拟内存(特殊分区,linux中为swap分区)划分为一个一个的页框,模拟成物理内存,将物理内存中较少使用的页框挪到虚拟内存当中,然后就腾出一段空间。 当内存中的数据,被挪到虚拟内存中时,内核会消除其物理内存的指向关系,但是内核会维护一张表,里面保留了数据的指向关系。当进程使用的数据存放在虚拟内存中时,内核会将进程的申请拦截,并再次将其他暂时不使用的数据挪到虚拟内存中去,将要使用的数据挪到物理内存中,并像进程给出指向关系。 这个过程就称为换进换出的过程,这个硬盘上的空间称为交换空间,交换空间的存在允许我们的内存过载使用。 在linux上,交换空间是一个分区(swap分区) 我们将内存中的数据放到磁盘上的过程称为page out,将内存中的数据取回的过程称为page in 相对应的,站到swap的角度来说,内存中的数据存入swap分区为swap in,将swap分区的数据读入内存叫做swap out。 当操作系统频繁有页面数据换进换出,很有可能是由于物理内存太小,虚拟内存只能用于应急使用,数据换进换出的效率低下,且硬盘的读取写入相比内存会慢很多。 CPU中的寄存器是存储空间中速度最快的,大概是1纳秒完成访问,一级缓存和二级缓存大概需要10纳秒左右,内存的完成访问时间在10毫秒左右,硬盘的访问时间可能是以秒为单位。 当我们使用交换分区的时候,会使系统的性能大受影响,如果不得不使用swap交换空间,我们应将swap分区放到靠外的磁道上。 free 命令,查看当前系统物理内存和交换分区的使用情况,默认是以字节为单位显示空间大小 -m选项以M为单位显示内存和swap交换分区的使用情况。 free 命令结果的中的buffers和cached buffers:缓冲,缓冲是避免慢的设备遭受冲击。 buffer中通常存储元数据,例如使用过的inode放在buffer中。 cached:缓存,缓存是快速设备向低速设备读取数据的中介(中间设备) cached中通常存储数据,保存元数据对应的数据。 缓存中也涉及交换,但是缓存中的数据只是往外交换,并不影响数据本身。 buffer、cached是为了提高计算机的性能而设定的。 创建交换分区(swap分区) 在fdisk中新建分区,并调整为linux swap类型(82),而后使用mkswap命令(交换分区的格式化命令) mkswap /dev/sda# 将新建的linux swap类型的分区格式化为交换分区。 也可以在格式化的时候指定卷标 swap:-L LABLE 创建分区----高级格式化----挂载 swap交换空间的挂载和格式化都较为特殊。 swap分区的挂载点比较独特:swap 挂载点为swap 文件类型为swap 挂载:swapon /dev/sda# 启动swap分区 swapoff /dev/sda# 关闭swap分区 当swap空间不够使用,且磁盘上已经没有空闲空间来创建新分区,但是某个已经挂载的设备上还有空闲的空间,在这个空闲的空间上使用软件的方式模拟硬件来创建一个镜像文件,将这个镜像文件当做设备来使用。模拟出来的镜像文件甚至可以分区格式化,挂载,很可能镜像文件看起来不到20M大小,但是fdisk查看却有120G。 无论是Windows还是linux都支持本地回环设备,loopback,回环设备。 dd 命令: dd命令是用于复制文件的,用法格式比较特殊。 dd if=input file of=output file 输入的文件或者数据(指定数据来源) 保存到什么地方(存储目标) dd和cp不同之处在于: cp命令是通过文件系统读取出来(内存中),再粘贴到我们制定的位置。cp命令是通过VFS接口,以文件为单位读取到内存中,然后保存到另一个文件所对应的区域。 对于dd命令来讲,它不通过VFS,二是直接将文件所对应的1.0代码复制。 dd命令可以只复制文件的几个字节, bs=1024(字节)bs为blocksize count=2(以bs为单位,一共复制两次) dd命令强大到无以复加的地步,甚至可以帮助我们备份MBR dd if=/dev/sda of=/tmp/MBR.backup bs=512 count=1 这里直接指定的硬盘,没有指定文件,那么就会从硬盘最开始处开始复制,当我们需要还原MBR的时候: dd if=/mnt/MBR.backup of=/dev/sda bs=512 count=1 dd命令还可以直接将光盘中的数据抽取出来做成iso文件,cat命令也可以实现 cat /dev/cdrom >/tmp/test.iso 没有指定文件,直接指定设备的时候,cat会一个字节一个字节的取读取。 linux中有两个特殊的设备 一是/dev/null 这个脚本里经常用到,是一个数据黑洞 二是/dev/zero 这个称为泡泡设备,能有向外吐0,要多少有多少。 我们可以借助泡泡设备,创建一个确定大小的虚拟镜像文件,这个文件可以直接被mkswap并且启用。 dd if=/dev/zero of=/tmp/swapfile bs=1M count=1024 使用dd命令实实在在创建一个大小为1024M的镜像文件,只是其中填满了0,所以硬盘会高速运转,,此处用于应急swap空间的添加。 dd 命令还可以用于测试磁盘的性能测试 dd if=/dev/zero of=/dev/test bs=1M count=1024 可以查看创建镜像文件时磁盘每秒完成的数据量。 dd命令有一个选项能跳过中间需要创建的空间。 seek 可用于创建一个假的文件。 dd if=/dev/zero of=/tmp/test bs=1 seek=1023 count=1 即创建一个假的1G镜像文件,使用fdisk命令对其格式化时会看见其空间大小为1G,实际上只有几M。 使用du命令还可以查看其实际大小。 挂载镜像文件设备: mount –o loop /mnt/.....iso /mnt/test 挂载镜像文件(回环设备) swapon -a 启用所有的交换设备(此处为定义在/etc/fstab下的交换设备) 给自己讲linux 2017-01-01 评论 1501 次浏览
第三十一讲——管理磁盘分区 管理磁盘分区的命令:fdisk fdisk /dev/sda(必须指向一个设备,不能指向一个分区)在sda上创建、删除分区。 执行命令后会进入一个交互式界面 p: 显示当前硬盘上的分区,包括没有保存的修改。 fdisk创建、删除分区时并不是立即保存生效的,只有退出这个命令的时候修改才会生效,如果创建错了、删除错了不保存直接退出即可。 n:创建新分区(新硬盘会有编号的选择,e扩展分区,p主分区) d:删除一个分区 w:保存并退出 q:不保存退出 t: 修改分区类型(文件系统类型)使用L可以查看所有支持的文件类型种类 l:显示所有支持的类型 创建一个新分区时,硬盘会询问使用的分区号(1/2/3/4),然后会默认一个起始柱面,这个默认就好,接下来就是指定结束柱面,可以按照空间大小指定:+1G(M/K) 扩展分区不能直接使用,它只是一个指针,指向MBR之外的一个分区表,扩展分区下创建的分区叫逻辑分区,逻辑分区是自动编号的。 当我们新建分区后内核不会立即识别,我们可以通过cat /proc/partitions查看当前内核是被了哪些分区。 创建完分区后我们需要通知内核重读分区表 partx /dev/sda (partprobe /dev/sda)重读分区表 当分区表重读后,接下来就是格式化并挂载分区。 操作系统的执行过程分为两段(两种模式) 一般来说,用户是没有特权取操作硬件的,所以这些进程所运行的模式我们称为用户模式,运行的空间我们称为用户空间。 所有的进程一般来说都运行在用户空间,指的是它们没有特权 我们常见的CUP(inter和AMD),将CPU划分为四个环状(同心圆)运行级别,最内层为ring0,外层为ring3,内核是跑在ring0上的,用户进程跑在ring3上,1和2由于历史原因没有使用,三级别下是没有特权的。 我们说过,任何程序在编程的时候,利用的是硬件芯片的功能,一些I/O操作(和硬件打交道的指令)都只能运行在零级别上。 所以要想和硬件打交道,必须要转入内核才有权限。(内核空间/内核模式)零级别。 文件系统对任何文件的操作都是通过文件系统调用接口来实现,一个内核所提供的功能都是通过系统调用向外提供的。因此,管理文件的功能也是通过系统调用来完成(和文件操作相关)。 我们要知道,打开一个文件可读取一个文件是两码事。 我们格式化分区之后会发现少了不少的空间,这些少去的空间用于存放元数据。 块大小(block size):对文件系统来讲,块大小是不确定的,它只能是2^n字节,一般为1024/2048/4096byte,三种情况(linux上)。 block size 决定了怎么装在磁盘块到内存中去,我们知道,磁盘中的数据不能直接被CPU访问,CPU要访问一个数据时,得先将数据装载进入内存。 内存中的空间一般是分成页面(页框)的,一般来讲,一个页框只能存放一个磁盘块或者两个磁盘块或者四个磁盘块,页框的大小通常为4k. 页框的大小对于不同的CPU是不一样的。 占据磁盘块的文件通常只有两类主流文件: 一是普通文件,二是目录文件 块组:块组属于逻辑概念,块组对用户是不可见的,块组是为了方便文件管理,块组的大小取决于块的大小,如果块大小为1K,那么一个块组中可以有1024*8bit个块(一个块位图中可标识的块的数目)。 在创建文件系统的时候,在元数据区有一个超级块(super block),用于保存创建了多少个块组。 super block坏了,基本上分区也就挂了,所以super block可以有多个备份 super block中保存了整个分区的全局信息。 有多少块组 每个块组中有多少个快 块大小 空闲磁盘块,已使用磁盘块 已用inode,未使用inode 块组描述符表(也拥有备份): 当前系统有多少块组,每一个块组从第几个开始,到第几个结束。 每一个块组都有一个inode表,每一个块组中有inode位图,块位图。 任何一个分区的第一个(第零个)块是不能被使用的,预留出来为boot block 引导块 如果在分区上安装操作系统,其BootLoader应当装在boot block中(多操作系统)。 boot block是被MBR调用的 除了第一个块,其他的块直接被划分为块组 boot block block group0 block group1 n…… 每一块组可划分为: super block GDT block bitmap inode bitmap inode table date blocks(数据块) mode权限 owner属主属组 size 大小 timestamps时间戳 direct blocks直接磁盘块指针 indirect blocks间接磁盘块指针 double indirect二级间接磁盘块指针 triple indirect三级间接磁盘块指针 super block超级块一般有3-4个备份 GDT:块组描述符表,group description table 存放每一个块组的起始块编号,结束块编号(块组边界信息),根据块个数不同,占据的空间也是不一样的,未必是一个磁盘块。 所以我们说一个磁盘分区内部又被分成了多个逻辑区域,彼此之间分隔开来管理。 inode:index node inode中存放inode号,属主属组,权限,时间戳,文件大小,直接磁盘块指针,间接磁盘块指针,二级间接磁盘块指针,三级间接磁盘块指针。 ext2 inode ext3于ext2最大的不同就是ext3被称为日志文件系统(journal file system) 日志文件系统将磁盘分为三个区,元数据区、数据区、日志区。 日志文件系统在运行的时候,先将inode的放入日志区,如果数据存储一般掉电了,重启时只需将日志中的inode删除即可,在ext2中需要遍历整个磁盘来寻找损坏的文件,效率非常低下。 日志文件系统提升了文件系统的检查速度,但是意为着多了一次I/O操作,写入操作比ext2慢一些。 非日志文件系统在linux上只有ext2一个,对于一些数据完整性、安全性要求不高,特别是需要大量写入小文件时,ext2的优势就比较明显(比如临时文件等情况),对性能要求比较高的场景下。 一级磁盘块,最多来讲只指向十来个磁盘块,不管指针有多少个级,这些指针加起来所能引用的块的个数是有限的,这个限制就是单个文件最大的文件大小限度。 对于一个系统工程师来讲,更多的管理操作如下: 对普通用户看不见的,不需要看的,我们要看 文件系统有多大,超级块在上面位置,超级块的备份个数够不够,GDT在什么位置,备份数够不够,里面存放了哪些信息,分了多少个磁盘块,有没有产生磁盘碎片,需不需要修复,一共有多少个块组,哪一个块组中有碎片等等,更多的是新加入的磁盘需要分区,格式化,挂载,以及文件系统损坏需要修复。 给自己讲linux 2016-12-31 评论 1626 次浏览
第三十讲——文件系统 文件系统是一个让我们在磁盘分区上创建文件管理的软件,本间系统本身跟某个特定的系统没有关系,它是内核中的功能。 我们将某个设备格式化为某个类型的文件系统的话,管理文件系统的软件(程序)在空间里面是一个用户进程,用户进程可实现将硬盘上的某个分区格式化为操作系统内核所支持的文件系统(高级格式化)。 mke2fs 创建文件系统,使用mke2fs 指定文件系统类型将硬盘的某个分区创建为ext2类型的文件系统。 文件系统属于内核的功能,但是创建文件系统需要用户执行命令结合内核所支持的功能来完成的。 linux操作系统支持的文件系统有:ext2、ext3、ext4、xfs、jfs等等 对文件系统发起的操作可能有: open 打开一个文件 close 关闭一个文件 create 创建一个文件 delete 删除一个文件 edit 编辑一个文件 这些应当是文件系统提供的基本功能,但内核中的子模块(文件系统)的系统调用都是由子模块提供的,这样一来文件系统的调用接口各不相同。 例如创建目录所支持的命令得支持多个文件系统,否则只能在某个文件系统上创建目录,这样的话就得添加很多重复的代码,为了方便调用,所以在文件系统上再封装上一层软件,这个软件能认识各个文件系统,但是它能够将不同文件系统的功能使用同一种统一的接口输出出来(类似于库),由这个软件进行翻译工作(VFS),虚拟文件系统,又叫伪文件系统。 VFS:virtual file system 虚拟文件系统 linux正是因为VFS(虚拟文件系统)的存在,才能够支持众多的文件系统。 FAT32,在linux上称为vfat NTFS Windows下的文件系统,linux默认是不支持的 ISO9660 光盘文件系统 CIFS通用互联网文件系统(windows) ext2/3/4 xfs、reiserfs、jfs(日志文件系统)、nfs(linux上的网络文件系统) ocfs2,(集群文件系统第二版),gfs2(全局文件系统第二版) 我们需要知道的是VFS也是内核中的功能。 对于Windows和linux,一个分区就是一个独立的文件系统,每个分区可以使用不同的文件系统,但最终都是归并在根目录下,通过挂载(或关联)的方式。 内核是与硬盘脱离的,或者说是高于硬盘的,我们要知道,内核工作起来之后是跑在内存中的,而且内核知道根在什么地方。 独立的分区在物理上是并行的,但是在逻辑上必须要有上下级关系。 根是一个逻辑概念,访问任何一个分区都要从根开始,根所在的分区称为根分区,也叫根文件系统,根分区下的目录并非都可以独立出去,比如/etc、/bin、/sbin等等 /etc /bin /sbin 必须要在根上 只有创建文件系统后才能被挂载或者关联到根下的某个目录上,作为其访问入口 我们关联一个文件系统,可以是直接从根开始 mount /dev/sdb /mnt/usb 也可以在别的挂载点中关联(挂载)。 给自己讲linux 2016-12-30 评论 1464 次浏览
第二十九讲——特殊文件 链接文件:链接文件在linux中分为两种 硬链接:直接指向相同inode的不同路径,彼此之间成为硬链接。 软连接:又称为符号链接,当我们访问一个符号链接的时候,实际上符号链接指向的是访问文件的路径,按字符存放,软连接的权限为777,但是最终的权限决定于被访问的文件。 Ls –l 命令中的第二个字段为 被硬链接的次数,当硬链接的次数大于2的话,我们删除这个文件不会真的删除,当硬链接的次数小2才会彻底的删除文件。 ln [ -s -v ] SRC DEST 硬链接:ln /etc/passwd /tmp/pwd 创建一个硬链接文件 不能够对目录创建硬链接,避免ABCA的死循环。 目录的硬连接数默认为2,因为目录中有一个当前目录(.), 硬链接不能跨文件系统,因为路径指向的为同一inode,不同文件系统都有自己的管理方式。 创建硬链接会增加文件被硬链接的次数。 软连接:符号链接 ls –s /etc/issue /tmp/is -s 创建软连接 -v 显示过程 软链接可应用于目录 软连接可以跨文件系统 不会增加被链接的次数 其大小为所指向路径所包含的字符数。 设备文件: b:块设备文件,按块为单位,可以随机访问的设备 存储设备,如硬盘 c:字符设备文件,按字符为单位,线性设备文件(有先后次序)。如键盘和硬盘 硬盘可以是线性的,也可以是随机的。 /dev下的设备文件,没有大小。 设备有主设备号(major number) 用于标识设备类型 次设备号(minor number) 用于标识同类型的不同设备。 创建设备文件 mknod 用于创建块或者字符设备文件。 mknod [ option ]… NAME TYPE [ major minor] 设备名称 类型 主设备号 次设备号 -m 创建时自定权限 777/644等等 设备文件的主要目的是用于作为设备文件的访问入口的,一般来说,内核会自动识别设备。 我们发往设备文件的内容会被指定到对应的设备上。但是如果我们echo “hello” >>/dev/sda就会直接覆盖掉硬盘最开始的一部分,也就是MBR。 不要轻易的向一个设备发送文件,这是很危险的操作。而且设备文件命名的方式很独特,不建议随意命名,像tty、pts等是用于标识某个终端。 硬盘设备的识别: 硬盘的文件名和硬盘的类型相关,根据硬盘接口的不同,其文件的标识也不一样。 IDE(ATA),hd开头 SATA、SCSI、USB接口的硬盘以sd开头。 如果同一类型的硬盘有多块,则以a/b/c/d区分同一类型的不同设备。 IDE:比较老的接口了,一般在主板上有两个IDE接口,而一根线可以接两块IDE硬盘,第一个接口上的第一块硬盘称为主盘,had,第二块称为从盘,hdb 第二个接口上的第一块盘称为主盘 hdc 第二块盘称为从盘 hdd 当主机上既有SATA又有USB硬盘时,则以内核识别的先后顺序来标识。 也可以通过UDEV来实现SATA1,SATA2,USB1等分别来标识,只是UDEV很麻烦,暂不介绍。 我们在同一块硬盘上可以有多个分区,主分区加扩展分区最多只能有四个,这是由于硬件制造的限制只有64byte的分区表,每16byte标识一个分区。 通过1,2,3,4对主分区进行标识,扩展分区下可以建立多个分区,称为逻辑分区,扩展分区是一个指针,指向更大的分区,扩展分区在硬盘上只能有一个。 不论主分区有几个,逻辑分区的编号一定是从5开始,且不能选择编号。 查看当前操作系统识别了几块硬盘: fdisk –l 列出所有磁盘及其分区 63 sector/track 平均每磁道有63个扇区 Cylinder:柱面 fdisk –l /dev/sda 列出指定设备下的分区,粉底刷卡还可用于管理磁盘分区 du -s /etc 查看目录大小(对每个子目录都做评估。) du /etc 查看目录中所有文件的大小 df 显示整个磁盘分区的使用情况 -i 查看inode的使用情况 -P 使df命令的显示在同一行 不加参数是查看当前磁盘分区中磁盘块的使用情况。 给自己讲linux 2016-12-29 评论 1395 次浏览