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

9月01日课程作业(练习)Linux文件系统管理

1、复习本次课程所讲的内容;Linux磁盘管理硬盘:硬盘是通用的叫法,其实硬盘和磁盘是一样的,都是用来存东西的;还有磁带、光盘、U盘等只是存储的介质不一样。机械式硬盘SSD固态硬盘

1、复习本次课程所讲的内容;

Linux磁盘管理  
    硬盘:硬盘是通用的叫法,其实硬盘和磁盘是一样的,都是用来存东西的;还有磁带、光盘、U盘等只是存储的介质不一样。    
        机械式硬盘    
        SSD固态硬盘

    机械式:  
        track磁道    
        每个扇区(sector): 512bytes    
        磁柱(cylinder): 分区的基本单位;

        主引导记录 MBR:Master Boot Record             512bytes  
                446: bootloader    
                64: filesystem allocation table    
                    16: 标识一个分区    
                2:55AA

    磁盘的主引导扇区=磁盘的主引导记录(MBR 446)+磁盘分区表(DPT 64) +结束符(55AA)

bootload可以安装在磁盘的主引导记录(MBR)或是分区的引导记录(PBR,也叫DBR)    
(1)linux的bootload可以安装在两者上(MBR,PBR)      
(2)windows自行安装的MBR只用作跳转到指定的分区上,windows的bootloader 是安装在分区的PBR上的

    磁盘接口类型:  
        IDE (ATA):133MB/s,/dev/hd    
        SCSI: 640MB/s    
        SATA:6Gbps    
        SAS:6Gbps    
        USB:480MB/s

        识别硬盘设备:/dev/sd  
            标记不同的硬盘设备:/dev/sd[a-z]    
            标记同一设备上的不同分区:/dev/sd[a-z][1-]    
                1-4: 主或扩展分区标识    
                5+:逻辑分区标识

        设备文件:特殊文件  
            设备号:    
                major, minor    
                    major: 设备类型    
                    minor: 同一类型下的不同设备

            “块”:block,随机设备  
            “字符”:character,线性设备

            GPT

设备文件分为两种:块设备文件(b)和字符设备文件(c)

设备文件一般存放在/dev目录下,对常见设备文件作如下说明:

/dev/hd[a-t]:IDE设备

/dev/sd[a-z]:SCSI设备

/dev/fd[0-7]:标准软驱

/dev/md[0-31]:软raid设备

/dev/loop[0-7]:本地回环设备

/dev/ram[0-15]:内存

/dev/null:无限数据接收设备,相当于黑洞

/dev/zero:无限零资源

/dev/tty[0-63]:虚拟终端

/dev/ttyS[0-3]:串口

/dev/lp[0-3]:并口

/dev/console:控制台

/dev/fb[0-31]:framebuffer

/dev/cdrom => /dev/hdc

/dev/modem => /dev/ttyS[0-9]

/dev/pilot => /dev/ttyS[0-9]

/dev/random:随机数设备

/dev/urandom:随机数设备

    分区:分隔存储空间为多个小的空间,每个空间可独立使用文件系统;

    分区工具:  
        fdisk, parted, sfdisk

    fdisk工具的使用:  
        最多支持在一块硬盘上的15个分区;

        分区管理子命令:  
            p: 显示    
            n: 创建    
            d: 删除    
            t: 修改分区ID    
            l: 列出所有支持ID类型    
            w: 保存退出    
            q: 放弃修改并退出    
            m: 获取帮助

        创建完成之后,查看内核是否已经识别新的分区:  
            # cat /proc/partitions

            有三个命令可以让内核重读磁盘分区表:  
                CentOS 5: partprobe [DEVICE]    
                CentOS 6,7:    
                    partx    
                    kpartx

                partx命令:  
                    partx DEVICE    
                    partx -a DEVICE    
                    partx -a -n M:N DEVICE    
                        M    
                        M:    
                        :N

   kpartx命令:  
  kpartx -af DEVICE 通知内核强制重读分区表【对于一个已经存在的磁盘,内核是不会直接识别的】

             技术分享

2、总结整理磁盘管理及文件系统管理中设计的各种命令的使用,并附注一定的示例;

    1)、查看系统分区情况 

        技术分享

    2)获取fdisk参数信息的相关帮助

命令:fdisk /dev/sda  #进入fdisk操作环境

          m                        #打印帮助 列表

技术分享

3)新建分区

按n #创建一个分区

Command (m for help): m    
Command action      
   a   toggle a bootable flag      
   b   edit bsd disklabel      
   c   toggle the dos compatibility flag      
   d   delete a partition      
   l   list known partition types      
   m   print this menu      
   n   add a new partition      
   o   create a new empty DOS partition table      
   p   print the partition table      
   q   quit without saving changes      
   s   create a new empty Sun disklabel      
   t   change a partition‘s system id      
   u   change display/entry units      
   v   verify the partition table      
   w   write table to disk and exit      
   x   extra functionality (experts only)

Command (m for help): n    
Command action      
   e   extended      
   p   primary partition (1-4)      
p      
Partition number (1-4): 3      
First cylinder (7063-26108, default 7063):      
Using default value 7063      
Last cylinder, +cylinders or +size{K,M,G} (7063-26108, default 26108): +10G   

Command (m for help): w    
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: 设备或资源忙.    
The kernel still uses the old table. The new table will be used at      
the next reboot or after you run partprobe(8) or kpartx(8)      
Syncing disks.      

         重启后生效。

linux文件系统管理

    文件系统:

    VFS:Virtual File System

    Linux:ext2,ext3,ext4,reiserfs,xfs,btrfs,swap    
    光盘:iso9600

     windows:fat32(vfat),ntfs

    Unix:ffs,ufs,jfs,jfs2

    网络文件系统:nfs,cifs

   集群文件系统:ocfs2,gfs2

  分布式文件系统:ceph

           mosefs,mogilefs,hdfs,gfs,gluterfs

(1)日志型文件

    非日志型文件:ext2

    日志型文件系统:ext3,ext4,reserfs,xfs,btrfs,swap

日志型文件系统[ext3,ext4]和非日志型文件系统[ext2]的区别:

日志型写入步骤:1.预备,当系统要写入文件时,会先在日志记录块中记录某个文件准备要写入的信息

2.实际写入,开始写入文件的权限和步骤;开始更新meta data[中间数据]的数据

3. 结束,完成数据与metadata的更新后,在日志记录块中完成该文件的记录

非日志写入步骤:1. 先确定用户对于欲添加文件的目录是否有w和x权限,若有的话才能添加

2.根据inode bitmap 找到没有使用的inode号码,并将新文件的权限/属性写入

3.根据block bitmap 找到没有使用的block号码,并将实际数据写入block中,且更新inode的block指向数据

4.将刚才写入的inode与block数据同步更新inode bitmap与block bitmap,并更新superblock的内容

当中途断电等因素导致系统中断时,会出现数据的不一致状态,这时非日志文件系统需要进行一致性检查,很费时间。而日志文件系统,只需要去检查日志记录块就可以知道那个文件发生了问题,不必去针对整块文件系统去检查。

      (2)swap:交换分区

    创建文件系统:

在分区上执行格式化(高级格式化)

       要使用某种文件系统,满足两个条件

              内核中:支持此种文件系统

             用户空间:有文件系统管理工具

创建工具:mkfs(make file system)

-t {ext2|ext3|ext4}:指明要创建的文件系统类型

mkfs-t ext4 = mkfs.ext4 = mke2fs -t ext4

b {1024|2048|4096}:其上限由page frame决定

-L LABEL:指定要使用的卷标[使用时,LABEL=‘MYLABELNAME‘]

-j: 相当于使用-text3

mkfs.ext3= mkfs -t ext3 = mke2fs -j = mke2fs -t ext3

-i #: 指明inode与字节的比率[不加% ],;即,每多少字节给创建一个inode;

-N #: 直接指明给此文件系统创建多少个inode

-m #:指定预留空间的百分比[只有root能用,不用%];默认为5;

-O [^]FEATURE:可以用来指明这个文件系统额外可以具有的属性,具体可以查看man手册

例:-o has_journa 启用日志属性

-o ^has_journa 不启用日志属性

e2label: 调整卷标

查看:e2label /dev/DEVICE

设定卷标:e2label /dev/DEVICE LABEL

tune2fs:查看或修改ext系列文件系统的某些属性

查看超级块中的数据信息:如UUID:全局惟一标识符

tune2fs-l /dev/DEVICE

例 tune2fs -l /dev/sda5

修改指定文件系统的属性:

-j:ext2 --> ext3

-L LABEL: 修改卷标;

-m #: 调整预留空间的百分比;

-O [^]FEATURE: 开启或关闭某种特性

-o [^]mount_options: 开启或关闭某种默认挂载选项

-o acl开启acl

-o ^acl关闭acl

dumpe2fs命令:显示ext系列文件系统属性信息

dumpe2fs[-h] /dev/DEVICE

例dumpe2fs -h/dev/sda5

blickid命令:可以查看文件类型

检测文件系统

fsck.ext2, fsck.ext3, fsck.ext4, fsck.xfs ...

fsck:文件系统检查命令

-tFSTYPE

fsck-t FSTYPE = fsck.FSTYPE

例fsck -t ext4 修复即删除不一致文件

-a:自动修复所有错误[慎用]

-r: 交互式修复错误

ext系列文件系统的专用工具:

e2fsck

-y: 对所有问题自动回复为yes;

-f: 即使文件系统处于clean状态,也要强制进行检测;

Windows无法识别Linux上专用的文件系统,因此,有存储设备需要两种系统之间交叉使用时,应该使用windows支持的文件系统:

#mkfs -t vfat /dev/DEVICE

挂载:

注意:1.在Linux系统上,所有的文件系统必须通过根文件系统的某个分支来访问;

2.单一文件系统不应该被重复挂载在不同的挂载点(目录)中

3.单一目录不应重复挂载多个文件系统

4.作为挂载点的目录理论上应该都是空白目录,不然原来目录下的文件会被隐藏

根文件系统:根是一切文件系统的访问入口,根关联到的分区,有一定的要求:FHS

除了根,其余所有的其它文件系统如果想要被访问,都只能够通过“关联”至根文件系统上的某个目录来实现;这种操作即所谓的“挂载”,也即mount;相反动作,即卸载,命令为umount

挂载点:mount_point,即用于作为另一个文件系统访问入口的目录;

mount命令:

mountDEVICE MOUNT_POINT

挂载点

1、事先存在;

2、应该使用别的进程未使用的目录;

3、挂载点下原有的文件将被隐藏;

mount:将显示当前系统已经挂载的所有文件系统的相关信息;

mount[OPTION]... [-t FSTYPE] [-o OPTION] [DEVICE] MOUNT_POINT

命令选项:

-r: 只读挂载

-w: read and write,读写挂载

-t FSTYPE: 被挂载的设备上的文件系统类型;可省略,此时mount会自动使用blkid命令来判断之;

-L LABEL: 以卷标的方式指定要挂载的设备,因此,此时DEVICE必须省;

-U UUID:以UUID的方式指定要挂载的设备,因此,此时DEVICE必须省;

-a: 自动挂载所有的支持自动挂载的设备(/etc/fstab文件中定义的支持自动挂载的设备);

-n: 默认情况下,设备挂载与否的改变结果会被保存于/etc/mtab中一份;-n选项用于变动时不更新此文件

此时,如果想查看挂载的所有文件系统:cat /proc/mounts  
-a: 自动挂载所有支持自动挂载的设备;    
-B:绑定目录至另一个目录上;

  -o 挂载选项:  
            async:异步模式    
            sync: 同步模式    
            atime/noatime:是否更新访问时间戳;    
            diratime/nodiratime:是否更新目录的访问时间戳;    
            auto/noauto: 是否允许此设备被自动挂载;    
            exec/noexec:是否允许执行此文件系统上应用程序;    
            dev/nodev:是否支持在此设备上使用设备文件;    
            suid/nosuid:    
            remount:重新挂载    
            ro    
            rw    
            user/nouser: 是否允许普通挂载此设备;    
            acl:是否支持此设备上使用facl;    
            defaults:rw, suid, dev, exec, auto, nouser, and async

umount:卸载命令  
            # umount DEVICE    
            # umount MOUNT_POINT

            查看正在访问指定挂载点的进程:  
                # fuser -v MOUNT_POINT

            终止所有正在访问指定的挂载点的进程:  
                # fuser -km MOUNT_POINT

3、创建一个10G的文件系统,类型为ext4,要求开机可自动挂载至/mydata目录

  1)创建挂载点    #mkdir /mydata

    技术分享

  2)创建分区    #我已创建sda3

    技术分享

  3)分区文件系统高级格式化    #mkfs.ext4 /dev/sda3

     技术分享

  4)配置挂载文件:/etc/fstab      #vim /etc/fstab

    /mydata                     ext4 defaults        0 0  

     技术分享

  5)挂载到 /mydata    

   # mount /dev/sda3 /mydata  

    技术分享

9月01日课程作业(练习)-Linux文件系统管理


推荐阅读
  • 本文介绍了如何使用n3-charts绘制以日期为x轴的数据,并提供了相应的代码示例。通过设置x轴的类型为日期,可以实现对日期数据的正确显示和处理。同时,还介绍了如何设置y轴的类型和其他相关参数。通过本文的学习,读者可以掌握使用n3-charts绘制日期数据的方法。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 在编写业务代码时,常常会遇到复杂的业务逻辑导致代码冗长混乱的情况。为了解决这个问题,可以利用中间件模式来简化代码逻辑。中间件模式可以帮助我们更好地设计架构和代码,提高代码质量。本文介绍了中间件模式的基本概念和用法。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
author-avatar
小流氓本尊_438
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有