码迷,mamicode.com
首页 > 其他好文 > 详细

磁盘及文件系统管理

时间:2015-04-20 09:45:45      阅读:283      评论:0      收藏:0      [点我收藏+]

标签:文件管理   空间   记录   书架   书籍   

磁盘及文件系统管理

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

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

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

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

下面我们以机械式硬盘为例说明磁道、柱面、扇区以及主引导记录。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

       对于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!

技术分享

查看内核是否读取了分区表,可用命令: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号用完之后就不能再创建文件。

技术分享

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

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

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

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

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

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

技术分享

[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,

技术分享

取消挂载之后又能看到

技术分享

[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  挂载点           强行终止正在使用此挂载点的进程终端

命令: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)

技术分享  

技术分享

归档工具: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

磁盘及文件系统管理

标签:文件管理   空间   记录   书架   书籍   

原文地址:http://liangyu.blog.51cto.com/10069887/1635865

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!