磁盘及文件系统管理

磁盘  

    硬盘采用全密封结构,用以保护精细的盘头机构。从外观上来看,只能看到一个金属盒及裸露在外的

控制电路板及数据线接口、电源接口、跳线等部件。 被密封在净化腔体内的构造主要包括固定面板、电

机和盘头组件等。其中盘头组件是核心部分,主要由浮动磁头组件、磁头驱动定位机构(又称为机械

臂)、盘片和主轴组件组成。 所有的硬盘盘片都装配在一个同心轴上,组成硬盘的数据存储载体。盘片

的双面都能够记录数据,所以每面都设置有读写磁头(最上面一张盘片的上表面和最下面一张盘片的下表

面通常作为保护面使用,不设置读写磁头)。磁盘工作时,主轴电机启动,主轴带动盘片做高速旋转,磁

头驱动定位系统控制读写臂的伸缩,让磁头定位在要读写的数据存储位置,通过读写电路控制磁头的读

写操作,从而完成硬盘的定位和读写。

    而磁道就是盘片上用于存储数据的一个个同心圆;由到多个同心圆组的叫柱面;扇区就是划分出来

的一个个存储区域,通常它的大小是512字节。磁盘的分区是按柱面分区的,磁盘中的第一个分区的第一

个磁道的第一个扇区叫作主引导记录MBR,用于寻找操作系统在哪个分区,方便开机时向内存加载操作

系统的数据(这是由引导加载器完成的)。MBR的存储规格:第一区域存储446字节,在boot下的

loader中,引导加载器;第二区域64字节,存放磁盘分区表,每16个字节记录一个分区。这种分区方法

只能使用在磁盘空间在2T一下的磁盘中。

    我们都知道,当我们想把一个U盘里的东西全部删除重新写入东西的最快捷的方法就是把这个U盘给格式化了。那么什么是格式化,格式化这个动作具体做了些什么呢?

    格式化是指对磁盘或磁盘中的分区进行初始化的一种操作,以便我们家能够按部就班地往磁盘上记录资料。就好比我们有一所大房子要用来存放书籍,我们不会搬来书籍之后往屋里的地上一扔就了事了,而是要事先在里面支起书架,表上类别,把书分门别类地放好。格式化分为低级格式化和高级格式化。

    低级格式化又称底层格式化或物理格式化,主要用于对磁盘进行划分柱面、磁道、扇区的操作。

    高级格式化又称逻辑格式化,它是指根据用户选定的文件系统(如:ext系列、xfs、swap、NFS等),在磁盘的特定区域写入特定的数据,以达到初始化磁盘或磁盘分区、清除原磁盘或磁盘分区中的所有文件。主要包括对主引导记录中分区表相应区域的重写、根据用户选定的文件系统,在分区中划分出一片用于存放文件分配表、目录表等用于文件管理的磁盘空间,以便用户使用该分区管理文件。

    对于Linux系统而言,每个分区都是一个可以独立访问的设备。在Linux磁盘设备文件对磁盘分区的访问标示的命名格式是:/dev/[s|h]d[a-z][1-~]。/dev是设备文件目录;[s|h]是磁盘设备的接口类型;[a-z]是磁盘的编号;[1-~]是磁盘分区的编号,其中1-4是主分区或扩展分区(占一个主分区空间,但指

向的是另一个实际存储的空间(该空间成为逻辑分区)),5-~为逻辑分区编号。

磁盘的接口类型、传输速率及存储格式

接口类型
传输速率
存储格式
IDE:并口
133MB/s
/dev/hd
SCSI:并口
640MB/s
/dev/sd
USB:串口
480MB/s

/dev/sd

SAS:串口
6Gbps
/dev/sd

 设备类型:字符设备(以字符为单位,只能顺序访问的设备:键盘);

           块设备(以块为单位,能够进行随机访问的设备:磁盘)

设备文件:关联至一个驱动程序,进而能够与与之对应的硬件设备交互。 设备文件无大小,只有元数据

没有数据。(设备文件是硬件设备的前端的体现)

设备命名具有主设备号和次设备号

        主设备号:标示设备类型;     次设备号:同类设备不同块设备分类

磁盘分区(管理)命令:fdisk      使用命令:fdisk -l  设备名  ,可以显示指定设备的详细信息,不加设

备名显示系统上所有设备的信息。

   命令:fdisk  设备名 ,可以进入交互式窗口,有很多子命令,这些子命令用于磁盘分区的管理。但

是所有编辑操作都是在内存中完成的,没有直接同步到硬盘上。进入交互式窗口命令:fdisk  设备名 

(在此模式下想要删除要用Ctrl+Backspace快捷键)子命令:m  显示帮助信息;n  创建一个新分区;

d  删除分区;w  保存设置信息并退出;q  不保存退出;t  修改分区的system id(id是十六进制数

字);l  列出已知的所有分区类型;p  列出现有的分区信息。

练习题:添加一块10G的硬盘,分3个主分区,每个主分区大小为512M;分4个逻辑分区,每个逻辑分区

的大小为1G。

[root@localhost tmp]# fdisk -l /dev/sdb
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         654     5253223+  83  Linux
Command (m for help): d
Selected partition 1
Command (m for help): w
The partition table has been altered!

wKioL1Uy-AaTqLpSAAGAUCG_9WE362.jpg

查看内核是否读取了分区表,可用命令:cat  /proc/partations

[root@localhost tmp]# cat /proc/partitions 
major minor  #blocks  name
   8       16   10485760 sdb
   8       17     530113 sdb1
   8       18     530145 sdb2
   8       19     530145 sdb3
   8       20          1 sdb4
   8       21    1060258 sdb5
   8       22    1060258 sdb6
   8       23    1060258 sdb7
   8       24    1060258 sdb8
   8        0  125829120 sda
   8        1     512000 sda1
   8        2  125316096 sda2
 253        0   52428800 dm-0
 253        1    2031616 dm-1
 253        2   70852608 dm-2

文件系统:管理存储空间中存储大量文件时实现按名存取的一种机制。

Linux中常见的文件系统类型:ext系列(ext2、ext3、ext4,centOS6默认使用的是ext4);xfs文件格

式(centOS7默认使用的是xfs);交换分区格式swap(将内存中的文件利用硬盘中的部分空间进行挪

移);网络文件格式NFS;集群文件格式gfs2(redhat研发);分布式文件格式mogilefs hdfs。

文件系统管理分两部分组成:文件系统内核模块和文件系统管理工具

文件系统的创建(叫格式化或者文件系统管理)

命令:mkfs  -t  文件系统类型  分区名

专门用来格式化ext系列文件系统的工具(命令):mke2fs

格式:mke2fs     [选项]     分区名

                  -t                    指定文件系统类型ext2、3、4(centOS6已可自动识别类型)

                  -b                   指定块大小[1024|2048|4096]

                  -L  卷标名         设定卷标名(类似于Windows中的磁盘名)

                  -i   #               设定数据空间中每#个字节创建一个iNode

                  -N   #               设定元数据区有多少个iNode

                  -m   #              指定为管理员预留空间占总空间的百分比,百分之#的空间

iNode存在于元数据块中,是一种索引条目,存储数据的块地址。每个文件都有一个iNode,当iNode号用完之后就不能再创建文件。

wKiom1Uy9wKzGVrUAADx4Qe36Nc731.jpg

查找分区的卷标名,命令:e2label   分区名

[root@localhost tmp]# e2label /dev/sdb5
jiuren

显示块设备的详细信息,命令:blkid  [选项]

            不跟选项             显示格式化后的所有设备的详细信息

                -L    卷标名     显示使用这个卷标名的设备名

                -U    UUID       显示使用这个UUID的设备名 

wKioL1Uy-XvBixwaAAF1jPE9MoA333.jpg

[root@localhost tmp]# blkid -L jiuren 
/dev/sdb5
[root@localhost tmp]# blkid -U 7b948207-8541-4144-809d-30c34a2f7f83
/dev/sdb5

文件系统的超级块信息查看工具:dumpe2fs

格式:dumpe2fs   [选项]    分区名   

                             不跟选项,显示所有超级块的所有信息

                  -h        只显示超级块的名字,不显示块组

[root@localhost tmp]# dumpe2fs /dev/sda1
dumpe2fs 1.41.12 (17-May-2010)
Filesystem volume name:   <none>
Last mounted on:          /boot
Filesystem UUID:          aeca7102-2bad-42bc-b4cc-dcac9a627b63
Group 0: (Blocks 1-8192) [ITABLE_ZEROED]
  Checksum 0x4e50, unused inodes 2015
  Primary superblock at 1, Group descriptors at 2-3
Group 1: (Blocks 8193-16384) [INODE_UNINIT, ITABLE_ZEROED]
  Checksum 0x63a5, unused inodes 2032
  Backup superblock at 8193, Group descriptors at 8194-8195
  Reserved GDT blocks at 8196-8451

软硬链接文件的存储方式及特性:

文件硬链接:指向同一个iNode的不同的文件路径,指向同一组数据块 

文件软连接(符号连接):有自己的iNode,但不指向数据块,而是指向文原件的访问路径(字符串)

硬链接特性:1、不能跨文件系统;2、不能对目录使用(不能对目录硬链接);3、创建硬链接会增加文

件的硬链接数

符号链接(软连接):1、可以跨问价系统;2、可以对目录使用(能对目录进行软连接);3、不会增加

硬链接数;4、删除原文件会损坏符号链接(导致符号链接无法访问)

创建连接文件:ln      格式:ln   [选项]    源文件   目标文件

                                             不加选项,默认创建硬链接文件

                                   -s        创建软连接文件

                                    -v        显示详细信息

[root@localhost tmp]# ln -s grub.conf mm
[root@localhost tmp]# ls
aa  boot               etc        grub.conf  jiuren3  mojlj    rc.sysinit  tmp  yum.log
bi  CentOS-Media.repo  functions  jiuren     mm       mylinux  testdir     usr
[root@localhost tmp]# ls -l mm
lrwxrwxrwx 1 root mml 9 Apr 19 04:36 mm -> grub.conf
[root@localhost tmp]# ls -l grub.conf 
-rw------- 1 root root 821 Apr 13 18:24 grub.conf
[root@localhost tmp]# ln grub.conf bb
[root@localhost tmp]# ls
aa  bi    CentOS-Media.repo  functions  jiuren   mm     mylinux     testdir  usr
bb  boot  etc                grub.conf  jiuren3  mojlj  rc.sysinit  tmp      yum.log
[root@localhost tmp]# ls -l grub.conf 
-rw------- 2 root root 821 Apr 13 18:24 grub.conf
[root@localhost tmp]# ln -v grub.conf cc
`cc' => `grub.conf'

重新设定ext系列文件系统中的可调参数,命令:tune2fs

格式:tune2fs   选项    分区名

                -l             查看指定文件系统(分区)的超级块信息,不显示组名

                -L            重新指定卷标名

                -m            重新调整管理员预留空间的百分比

                -u  UUID     指定文件系统的UUID

[root@localhost tmp]# tune2fs -L mml /dev/sdb5
tune2fs 1.41.12 (17-May-2010)
[root@localhost tmp]# blkid /dev/sdb5
/dev/sdb5: LABEL="mml" UUID="7b948207-8541-4144-809d-30c34a2f7f83" TYPE="ext2" 
[root@localhost tmp]# tune2fs -m 10 /dev/sdb5
tune2fs 1.41.12 (17-May-2010)
Setting reserved blocks percentage to 10% (53012 blocks)

格式化交换分区,命令:mkswap

格式:mkswap   选项   分区名

               -L   卷标名    改变卷标名

               -U   UUID      改变UUID

[root@localhost tmp]# mkswap -L cc /dev/sdb6
Setting up swapspace version 1, size = 1060252 KiB
LABEL=cc, UUID=ce8732b1-c490-4209-a348-1a9be3e7b53c
[root@localhost tmp]# blkid /dev/sdb6
/dev/sdb6: LABEL="cc" UUID="ce8732b1-c490-4209-a348-1a9be3e7b53c" TYPE="swap"

命令:free   显示内存的使用情况

      其选项:-m     按M为单位

                -g      按G为单位

[root@localhost tmp]# free -m
             total       used       free     shared    buffers     cached
Mem:           988        265        722          0         27        131
-/+ buffers/cache:        106        882
Swap:         1983          0       1983

挂载:将额外的文件系统与根文件系统建立关联关系,使得其作为此额外文件系统的访问入口的过程

(一个目录下只能有一个挂载点,若该目录下原有文件,挂载后会覆盖、隐藏)

挂载命令:mount   

       格式:mount   选项   设备    挂载点(目录)

                       -t       指定文件系统类型(centOS6已能识别文件的类型)

                       -w      读写挂载

                       -r       只读挂载

                       -a       挂载配置文件/etc/fstab中的所有条目

                       -n       挂载时不更新/etc/mtab

                       -B或--bind   源目录  目标目录    把目标目录关联到源目录,实际的操作是源目录

                       -o  选项参数(挂载属性)

  选项“-o”的参数:async  使用异步模式,数据的修改先于内存中完成,然后根据某种策略定期同

步至磁盘,实现持久存储,减轻IO压力

                        sync   使用同步模式,实时保存数据,但是IO压力大

                        auto   支持mount -a命令实现自动挂载(默认)

                        noauto 不支持mount -a命令实现自动挂载

                        noexec 不允许此设备的任何二进制程序运行(默认)

                        exec   允许此设备的二进制程序运行

                        user   允许普通用户挂载设备

                        nouser 不允许普通用户挂载设备 

     一般都走的是默认,若想指定需要全部指定,要指定全面 

取消挂载命令:umount    格式:umount   [设备(设备名、卷名、UUID)|挂载点]

查看已挂载上的条目,命令:cat /etc/mtab;需要挂载的设备都在/etc/fstab文件中,主要用于系统启动时挂载设备;/proc/mounts内核中识别的所有挂载条目(最权威)。

挂载之后查看不到aa目录下的文件bb,

wKioL1Uy-lCRmn5XAABwTbL866w790.jpg

取消挂载之后又能看到

wKiom1Uy-PjxHzhtAAA7WkTckmU615.jpg

[root@localhost tmp]# mount -w /dev/sdb5 aa
[root@localhost tmp]# cat /etc/mtab |tail -1
/dev/sdb5 /tmp/aa ext2 rw 0 0
[root@localhost tmp]# umount aa
[root@localhost tmp]# mount -n /dev/sdb5 aa
[root@localhost tmp]# cat /etc/mtab |tail -1
none /proc/sys/fs/binfmt_misc binfmt_misc rw 0 0

关联目录之后实际操作的是源目录

[root@localhost tmp]# mount -B bb aa
[root@localhost tmp]# touch aa/bb
[root@localhost tmp]# ls bb
bb

系统启动时挂载的配置文件:/etc/fstab

  devpts       /dev/pts        devpts       gid=5,mode=620        0              0

  设备            挂载点      文件系统类型         挂载选项      转存频率   自检次序(0是不自检)

命令:fuser   查看有哪些进程正在使用挂载点(只能使用挂载点)                      

格式:fuser   -v   挂载点           查看有哪些进程正在使用挂载点

             -km  挂载点           强行终止正在使用此挂载点的进程终端

[root@localhost tmp]# fuser -v aa
                     USER        PID ACCESS COMMAND
aa:                  root       1747 ..c.. bash

注意:查看进程在占用就必须到目录下,占用之后才可以查看

[root@localhost tmp]# fuser -km aa
aa:                   1747c

之后就可以进行卸载挂点

命令:du   查看某目录占用空间的情况

格式:du   选项    目录  (不跟选项列出目录下所有文件)  

            -s        只列出目录的大小

            -h        换单位,换成人类看的懂的大小

[root@localhost tmp]# du -h aa
16K aa/lost+found
18K aa
[root@localhost tmp]# du -sh aa
18K aa

命令:df    查看文件系统空间(分区)的占用情况(因为是占用情况,所以该文件系统是已挂载的)

  格式:df  [选项]   [分区名]     不跟显示出所有

              -h      换单位,换成人类看的懂的大小

              -i      显示分区iNode的使用率,而不是分区空间的使用率

[root@localhost tmp]# df
Filesystem           1K-blocks    Used Available Use% Mounted on
/dev/mapper/VolGroup-lv_root
                      51475068 1874016  46979612   4% /
tmpfs                   506144       0    506144   0% /dev/shm
/dev/sda1               487652   28383    433669   7% /boot
/dev/mapper/VolGroup-lv_home
                      69608928   53140  66013160   1% /home
/dev/sdb5              1043460    8212    929224   1% /tmp/aa
[root@localhost tmp]# df -h /dev/sdb5
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb5      1020M  8.1M  908M   1% /tmp/aa
[root@localhost tmp]# df -i /dev/sdb5
Filesystem     Inodes IUsed IFree IUse% Mounted on
/dev/sdb5       66528    11 66517    1% /tmp/aa

命令:fsck     文件系统的修复工具

格式:fsck   [选项]    [文件系统]     什么都不跟修复的是“/”

               -t                    修复时指定文件系统类型

               -a                    自动修复错误

               -r                     交互式修复错误

命令:e2fsck      专用于ext系列文件系统的修复工具

格式:e2fsck     选项    文件系统(分区)

                 -y       所有提示默认为yes

                 -f       强制进行检测

挂载的文件系统不能够修复和检测。

[root@localhost tmp]# e2fsck -f /dev/sdb5
e2fsck 1.41.12 (17-May-2010)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
mml: 11/66528 files (0.0% non-contiguous), 12504/530128 blocks

bash编程:位置参数:$0:引用命令本身;$1:引用第一个参数;$2:引用第二参数,。。。

[root@localhost tmp]# vim file 
[root@localhost tmp]# bash file jiuren
file
jiuren
[root@localhost tmp]# cat file
#!/bin/bash
echo $0
echo $1

 特殊变量:$?:上一条命令的执行状态

           $#:  位置参数变量的个数(不包含自身的)

           $*或$@  列出所有位置参数变量(不包含自身的)

[root@localhost tmp]# vim file
[root@localhost tmp]# bash file jiuren 
file
jiuren
1
[root@localhost tmp]# cat file
#!/bin/bash
echo $0
echo $1
echo $#
[root@localhost tmp]# bash file jiuren 
file
jiuren
jiuren
[root@localhost tmp]# cat file
#!/bin/bash
echo $0
echo $1
echo $*

练习:创建一个用户,用用户名通过传递参数获得

[root@localhost tmp]# vim user
[root@localhost tmp]# bash user mml
[root@localhost tmp]# id mml
uid=505(mml) gid=65533(mml) groups=65533(mml)
[root@localhost tmp]# cat user
#!/bin/bash
useradd $0

bash计算:运算表达式:$[ $变量(运算符)$变量 ]  (注意中括号中间的空格)

[root@localhost tmp]# aa=3
[root@localhost tmp]# bb=4
[root@localhost tmp]# echo "$aa+$bb"
3+4
[root@localhost tmp]# echo "$[ $aa+$bb ]"
7

变量的引用:通过命令引用(把命令整体当做变量引用)    echo  `wc `     (反引号,数字1前面的符号)

[root@localhost tmp]# wc -l /etc/passwd | cut -d" " -f 1
35
[root@localhost tmp]# echo `wc -l /etc/passwd | cut -d" " -f 1`
35
[root@localhost tmp]# wc -l /etc/passwd
35 /etc/passwd

压缩和解压缩:(解压之后原文件没了)

压缩工具 解压缩工具
后缀名
gzip
gunzip
.gz
bzip2
bunzip
.bz2
zip
unzip
.zip

       使用格式:gzip   [选项]     文件名

                         -#      指定压缩比(范围:1-9)  默认压缩比为:6   数字越大压缩越狠

                         -d      解压缩,引用gunzip

       使用格式:bzip2   选项     文件名

                         -#        指定压缩比(范围:1-9)  默认压缩比为:6   数字越大压缩越狠

                         -d        解压缩,引用bunzip

                         -k         压缩后保留原文件

       使用格式:zip   目标文件   原文件    (目标文件需要自己输入)(可以自己压缩归档)

       解压缩 :unzip   压缩文件   (主要用于Windows)

wKioL1UzwoKCI2wZAACQRKbneyQ227.jpg  

wKiom1UzwYzgdBxLAACT6ZPVcgg085.jpg

归档工具:tar (归档只是把目录整合成一个文件,大小没有变化,之后可以压缩了)   

                 格式:tar    [选项]  -f  归档后文件(以.tar结尾)  原目录

                               -c            创建归档

                               -x            展开归档

                               -C   目录  指定归档文件存放目录,不指定默认为当前

                               -t           无需展开归档文件即可查看归档文件的文件列表

[root@localhost tmp]# ls
aa  bi    cc                 etc   functions  grub.conf  jiuren3  mojlj    rc.sysinit  tmp   usr
bb  boot  CentOS-Media.repo  file  gd.tar     jiuren     mm       mylinux  testdir     user
[root@localhost tmp]# gzip gd.tar 
[root@localhost tmp]# ls
aa  bi    cc                 etc   functions  grub.conf  jiuren3  mojlj    rc.sysinit  tmp   usr
bb  boot  CentOS-Media.repo  file  gd.tar.gz  jiuren     mm       mylinux  testdir     user

  tar的归档压缩机制

           -z    调用gzip      .tar.gz

           -j    调用bzip2     .tar.bz2

创建归档文件并压缩  tar   -czf  目标文件名   原文件名

解压并展开归档     tar   -xzf  文件名

[root@localhost tmp]# ls
etc
[root@localhost tmp]# tar -czf etc.tar.gz /etc
tar: Removing leading `/' from member names
[root@localhost tmp]# ls
etc  etc.tar.gz

你可能感兴趣的:(书籍,文件管理,空间,书架)