磁盘、文件系统管理

linux磁盘、文件系统管理

硬盘:机械硬盘、固态硬盘

    计算硬盘速度:IoPs:(Io  per  second ) 每秒20次

机械硬盘:

    track:磁道

    平均寻道时间

        5400rpm    每分钟5400转,(一般笔记本)

        10000/15000   台式电脑

    sector:扇区(一个扇区512byte,)

    cylinder:柱面(一块弹片上的上下两面的同一个磁道)

不同弹面上的同一个编号的叫柱面,分区划分是给予柱面的

1.为什么要分区?

        因为硬盘很大,为了使得一个硬盘中可以组织为多个可独立管理的文件系统,所以要分区,每一个被划分出来的分区是独立的块设备。

设备分两类:

随机访问设备:

块设备:Block,存取单位是“块”,如硬盘 

线性访问设备:

字符设备:“char”,存取单位是“字符”,如键盘

        每一个设备都有一个文件作为它的访问入口,此文件我们称之为设备文件,该文件关联至一个设备驱动程序,进而能够与之对应的硬件设备通信

    每一个硬件设备在内核集中都是靠一个设备号来进行标识的

    设备号:用来标识设备,不同类别的设备各有不同的设备号,同一类别的设备有不同设备或多个设备,因此就有主设备号和次设备号

    主设备号:major:用来识别设备类型

    次设备号:minor:用来识别同一类型下的不同设备

MBR(Master   Boot  Record):主引导记录

        在硬盘上有一个0磁道0扇区是被预留出来的,他不属于任何分区,这个扇区称之为MBR,严格意义上讲应该叫做用来存储MBR的一段空间,

0磁道0扇区:

        该扇区的大小为512bytes,专门用来存储MBR(Master Boot  Record)主引导记录,MBR又分为三部分

    第一部分:446个字节:存储boot loader,引导加载器

    第二部分:64bytes:存储分区表:有多少多少个分区,每个分区从哪里开始到哪里结束;其中每16个字节表示一个分区,因此64除16等于4,so,一块设备最多只能有4个主分区;

    第三部分:2bytes:前面信息的有效性标识(结束标志),用4个16进制数来表示55AA,表示前面510bytes是有效的。

    如果一块硬盘需要划分超过4个分区,则需要其中16个字节的主分区划分为扩展分区,扩展分区中可以划分无数个逻辑分区(当然也得硬盘大小决定)

注意:当磁盘容量超过2T的时候,MBR机制不能识别到2T以上的磁盘空间,此时需要用到GPT机制来进行分区

文件系统管理

重新创建文件系统会损坏原有文件

分区管理

fisk命令:管理MBR(Master  Boot   Record)磁盘分区表

        fdisk提供了一个交互式接口来管理分区,他有许多子命令,分别用于不同的管理功能,所有操作都是在内存中完成,没有直接同步到磁盘,如果分区完成,输出w命令保存退出后才写到磁盘并生效。

类型:分区所在场景类型(使用·fdisk  /dev/磁盘· 使用l命令即可查看所有id对应分区类型)

正常分区:83

扩展分区:5

交换分区:82

 Device    Boot      Start         End       Blocks    Id  System
/dev/sdb1   *         1            26        204800    83  Linux
/dev/sdb2             26           7859     62914560   8e  Linux LVM

注:centos6上“start”字段和“End”字段表示的是此分区的大小是按照柱面的单位划分大小(表示开始柱面和结束柱面)

      centos7上“start”字段和“End”字段表示的是此分区的大小是按照扇区的单位划分大小(表示开始扇区和结束扇区)

1.查看分区情况:

fdisk   -l[u]   [device]

列出指定磁盘设备的分区情况

(1)#fdisk -l      列出所有分区设备

(2)#fdisk  -l  /dev/sda    列出sda磁盘的分区情况

root@localhost mntsdb]# fdisk -l /dev/sda
Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000682bf
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *           1          26      204800   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sdb2              26        7859    62914560   8e  Linux LVM

2.管理分区

fdisk  [u]    [device]

#fdisk  -u  /dev/sda  //进入fdisk配置分区界面,选项”u“可不用写。

 

[root@localhost mntsdb]# fdisk -u /dev/sdb
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c').
Command (m for help): 在此键入命令,可用m查看命令

进入配置交互式界面常用命令:

     n:创建新分区

     d:删除指定已有的分区

     t:修改分区类型

     l:查看所有id对应分区类型,

     p:列出已有分区

     w:保存退出

     q:不保存退出  

     m:帮助  (列出所有交互命令)

    

n:创建新分区

Command (m for help): n   //新建分区,n命令
Command action      //列出当前可创建的分区
   e   extended    //扩展分区
   p   primary partition (1-4 )  //主分区
p       //输入p命令,创建主分区
Partition number (1-4): 1    //主分区号1
First cylinder (1-2610, default 1):     //分区开始柱面(centos6是以柱面为单位划分分区大小)
Using default value 1     //直接回车从第一个开始
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +1G  
     //大小为1G,指定分区大小有三种方法(1、输出最后柱面,表示从开始柱面到结束柱面大小2、+柱面,表示从开始柱面到指定的柱面,如+100,表示在第一个柱面的基础上增加100个柱面,3、直接输出分区大小,单位K/M/G )

Command (m for help): p    //查看当前分区信息
一下为当前磁盘的描述信息,总大小为21.5GB,255个磁头,63个扇区为一个磁道,2610个柱面等等
#####################################
#Disk /dev/sdc: 21.5 GB, 21474836480 bytes                     
#255 heads, 63 sectors/track, 2610 cylinders                        
#Units = cylinders of 16065 * 512 = 8225280 bytes             
#Sector size (logical/physical): 512 bytes / 512 bytes         
#I/O size (minimum/optimal): 512 bytes / 512 bytes          
#Disk identifier: 0x4d566b71                              
#####################################
   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1         132     1060258+  83  Linux

d:删除指定已有的分区

Command (m for help): p
  Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1         132     1060258+  83  Linux
/dev/sdc2             133         264     1060290   83  Linux
/dev/sdc3             265         396     1060290   83  Linux
Command (m for help): d
Partition number (1-4): 1
Command (m for help): p
   Device Boot      Start         End      Blocks   Id  System
/dev/sdc2             133         264     1060290   83  Linux
/dev/sdc3             265         396     1060290   83  Linux

t:修改分区类型

  Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1         132     1060258+  83  Linux
/dev/sdc2             133         264     1060290   83  Linux
/dev/sdc3             265         396     1060290   83  Linux
Command (m for help): t
Partition number (1-4): 2
 Hex code (type L to list codes): 82    //可使用大写L查看分区id号对应的分区类型
Changed system type of partition 2 to 82 (Linux swap / Solaris)

l:查看所有id对应分区类型,

Command (m for help): l
 0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris        
 1  FAT12           39  Plan 9          82  Linux swap / So c1  DRDOS/sec (FAT-
 2  XENIX root      3c  PartitionMagic  83  Linux           c4  DRDOS/sec (FAT-
...........................

p:列出已有分区

Command (m for help): p
..........
   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1         132     1060258+  83  Linux
/dev/sdc2             133         264     1060290   82  Linux swap / Solaris
/dev/sdc3             265         396     1060290   83  Linux

w:保存退出

Command (m for help): w

q:不保存退出  

Command (m for help): q


m:帮助  (列出所有交互命令)

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)

注:在已有分区并且已经挂载中的分区所在的磁盘上创建的新分区,内核可能在创建完成后无法直接识别

查看磁盘生效的所有分区三种方法:

1、cat  /proc/partitions

2、lsblk     

  //不加参数列出所有分区信息,后面可跟参数(如:lsblk   /dev/sda  ,只列出sda磁盘的分区信息)

3、ls   /dev/sd*       //因为现在的操作系统所有磁盘都是以sd开头命令

通知内核强制重读磁盘分区表:

centos6/7:partx  -a   [device]     同步指定的磁盘指定分区信息

-d:同步删除的分区信息,强读磁盘的分区信息

–nr: 同步磁盘的指定范围的分区信息,一般组合d使用

      kpartx  -af  [device]     同步指定的磁盘所有分区信息

[root@localhost mntsdb]# partx -a /dev/sdc
BLKPG: Device or resource busy
error adding partition 1
BLKPG: Device or resource busy
error adding partition 2
BLKPG: Device or resource busy
error adding partition 3
[root@localhost mntsdb]# kpartx -af /dev/sdc

注:parted 默认创建的是GPT类型的分区,fdisk创建的是MBR类型的分区

创建文件系统:

格式化分为两类:

     低级格式化:(分区之前进行,划分磁道)

     高级格式化:(分区之后进行,创建文件系统)

创建文件系统是划分分区的元数据区和数据区

    元数据区:

        文件的元数据(inode)

            大小、权限、属组、属主、时间戳、数据块指针

VFS:virtual  file  system 虚拟文件系统

linux的文件系统:ext2/ext3/ext4/xfs/vfat/reiserfs/btrfs
光盘的文件系统:iso9660
网络文件系统:gfs2、ocfs2
交换文件系统:swap
伪文件系统:proc、sysfs、tmpfs
unix文件系统:ufs、ffs、jfs(有日志)

注:linux的文件系统又以有无日志功能分类:其中:有日志的文件系统(ext3、ext4、xfs)无日志的文件系统(ext2、vfat)

文件系统管理工具分类:

1、创建文件系统的工具
    mkfs、mke2fs(ext系列文件系统管理工具)
2、检测及修复文件系统的工具
    fsck
3、查看文件系统属性的工具
    dumpe2fs、tune2fs
4、调整文件系统特性的工具
    tune2fs

1、创建文件系统:mkfs

mkfs -t ext2   /dev/sda1   //创建文件系统
mkfs -t ext2 = mkfs.ext2

2、专门管理ext系列文件:mke2fs

mke2fs  [option]  device
-t :指明要创建的文件系统
-j: 创建ext3类型文件系统
-b BLOCK_SIZE: 指定块大小,默认为4096;可用取值为1024、2048或4096;
-L LABEL:指定分区卷标;
-m #: 指定预留给超级用户的块数百分比
-i #: 用于指定为多少字节的空间创建一个inode,默认为8192;这里给出的数值应该为块大小的2^n倍;
-N #: 为数据空间创建多少个inode个数;

-t :指明要创建的文件系统

[root@localhost mntsdb]# mke2fs -t etx4 /dev/sdb2
[root@localhost mntsdb]# blkid  /dev/sdb2
/dev/sdb2: UUID="c4359ac0-e295-48a8-bc78-916bfc644fbb" TYPE="ext2" 
注:mke2fs -t etx4 /dev/sdb2  ==  mkfs.ext4  /dev/sdb2    ==  mkfs -t ext4  /dev/sdb2

-j: 创建ext3类型文件系统

[root@localhost ~]# mke2fs -j /dev/sdc1
.......
[root@localhost ~]# blkid /dev/sdc1
/dev/sdc1: UUID="03cb5410-c543-4d37-8857-3fa531c23718" SEC_TYPE="ext2" TYPE="ext3"

-b BLOCK_SIZE: 指定块大小,默认为4096;可用取值为1024、2048或4096;(只能用这是三个值)

[root@localhost ~]# mke2fs -b 2048 /dev/sdc2
..........
[root@localhost ~]# tune2fs -l /dev/sdc2
tune2fs 1.41.12 (17-May-2010)
.......
First block:              0
Block size:               2048    //tune2fs 
......
注:块大小决定文件的寻址范围
块大小   直接寻址    间接寻址    二次间接寻址    三次间接寻址
1024     12KB        268KB        64.26MB        16.06GB
2048     24KB        1.02MB       513.02MB        265.5GB
4096     48KB        4.04MB        4GB~             4TB

-L LABEL:指定分区卷标;

[root@localhost ~]# mke2fs -L "hello sdc3" /dev/sdc3
mke2fs 1.41.12 (17-May-2010)
Filesystem label=hello sdc3
.......
[root@localhost ~]# blkid /dev/sdc3
/dev/sdc3: LABEL="hello sdc3" UUID="624cbf32-9331-4703-b787-65f1d1a471c4" TYPE="ext2"

 

-m #: 指定预留给超级用户的块数百分比

        为超级用户保留的块的比例。为了防止所有的块都被用光,某些情况下启动不起来,必须要为超级用户保留一定比例的块,这个值默认是5%

[root@localhost ~]# mke2fs -m 10 /dev/sdc4
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
850304 inodes, 3397747 blocks
339774 blocks (10.00%) reserved for the super user 
   //安装过程中提示出来的信息,预留10%给超级用户
 
[root@localhost ~]# tune2fs -l /dev/sdc4     //使用查看ext系列文件系统信息
.......  
Reserved block count:     339774   //此为预留的超级块信息
.........


-i #: 用于指定为多少字节的空间创建一个inode,默认为8192;这里给出的数值应该为块大小的2^n倍

    这个参数的含义是多少个字节分配一个inode。这个参数反映的是,我们对储存在我们文件系统上的每个文件大小的期许。换句话说,我们期待,每个文件都是4096个字节左右,每个文件需要一个inode。所以我们一共需要500M/4096=12800个inode。

    举例说明,如果我打算在我这个ext2存储的文件都很小,比如说大多数文件都小于1K。那么如果这个-i的值为8192的话,就会出现下面的情况:总共有512000个块却只有64008个inode。 如果你还没体会到我的意思,那么看Group 0 ,1000个左右的free inode,但是有近8000个free block 。根据我的设定,我的文件大多数比较小,那么,当我的文件个数达到1000个时 free inode先用完了,Group 0 还有近7000个块空闲。 也就是说选错了 -i参数使我的inode先用完了。那么就算有大把的free block,你也无法创建文件了。

    这个参数的取值范围是 1024~65536 

设定原则为:考虑下你的大多数文件有多大,就设为多大。不设成1024的整数倍也是可以的

[root@localhost ~]# mke2fs -j -i 2048 /dev/sdc4
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
6795776 inodes, 3397747 blocks

-N #: 指定inode个数;

[root@localhost ~]# mke2fs -N 1000 /dev/sdc4

小例题:在对分区进行创建文件系统时出现提示在运行时,如下类问题时:解决办法为(先运行:dmsetupstatus,观看提示结果,再运行 dmsetup remove_all,再次运行:dmsetup status 查看结果与之前有什么不同,此时再创建文件系统就没问题了

[root@localhost ~]# mkfs.ext4 /dev/sdc1
mke2fs 1.41.12 (17-May-2010)
/dev/sdc1 is apparently in use by the system; will not make a filesystem here
[root@localhost ~]#dmsetup status
[root@localhost ~]#dmsetup remove_all
[root@localhost ~]#dmsetup status

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

注意:块大小创建后不能修改

-j: 不损害原有数据,将ext2升级为ext3;

[root@localhost ~]# blkid
/dev/sdc4: UUID="ae221423-d29a-4d23-918c-6c2e22e969d3" TYPE="ext2" 
[root@localhost ~]# tune2fs -j /dev/sdc4
/dev/sdc4: UUID="ae221423-d29a-4d23-918c-6c2e22e969d3" SEC_TYPE="ext2" TYPE="ext3"

-L LABEL: 设定或修改卷标; 

[root@localhost ~]# blkid
/dev/sdc3: LABEL="hello sdc3" UUID="624cbf32-9331-4703-b787-65f1d1a471c4" TYPE="ext2" 
[root@localhost ~]# tune2fs -L "This is LABEL" /dev/sdc3
[root@localhost ~]# blkid
/dev/sdc3: LABEL="This is LABEL" UUID="624cbf32-9331-4703-b787-65f1d1a471c4" TYPE="ext2"

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

#tune2fs -m  10 /dev/sdc4 

-r #: 指定预留块数;

#tune2fs  -r  4096  /dev/sda1

-o: 设定默认挂载选项;(对指定的分区设定挂载选项后,挂载此分区的目录将继承此功能)

#tune2fs  -o   acl  /dev/sdc1    //设定acl控制。
#tune2fs  -o  ^acl  /dev/sdc2    //关闭acl控制

-c #:指定挂载次数达到#次之后进行自检,0或-1表关闭此功能;

#tune2fs -c  


-i #: 每挂载使用多少天后进行自检;0或-1表示关闭此功能;

[root@localhost ~]# tune2fs -l  /dev/sdc1
.......
Mount count:              0
Maximum mount count:      35         //此分区超过挂载35次就检查文件系统
Last checked:             Mon Jul 25 20:48:14 2016
Check interval:           15552000 (6 months)  
 //此分区超过6个月就检查文件系统   这两个条件满足其中一个就触发检查
.......

-l: 显示超级块中的信息;

#tune2fs -l /dev/sdc1

blkid: 查询或查看磁盘设备的相关属性

blkid  device      

[root@localhost ~]# blkid /dev/sdc2
/dev/sdc2: UUID="82f6661f-9edc-4a2d-80a2-34e2e701f722" TYPE="ext2"

blkid  -U   UUID    

[root@localhost ~]# blkid -U 82f6661f-9edc-4a2d-80a2-34e2e701f722
/dev/sdc2

blkid    -L     LABEL

[root@localhost ~]# blkid /dev/sdc3
/dev/sdc3: LABEL="hello world" UUID="624cbf32-9331-4703-b787-65f1d1a471c4" TYPE="ext2" 
[root@localhost ~]# blkid -L "hello world"
/dev/sdc3

e2label: 用于查看或定义卷标

格式:e2label  设备文件 设定卷标

e2label device //查看分区卷标

[root@localhost ~]# e2label /dev/sdc3
hello world

e2label  device   LABEL   修改指定的分区的卷标,如果原本有则替换

 [root@localhost ~]# e2label /dev/sdc4 hello
[root@localhost ~]# e2label /dev/sdc4
hello

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

[root@localhost ~]# dumpe2fs  /dev/sdc2   //显示系统属性信息

-h: 只显示超级块中的信息 
[root@localhost ~]# dumpe2fs -h /dev/sdc2
dumpe2fs 1.41.12 (17-May-2010)
Filesystem volume name:   <none>
Last mounted on:          <not available>
Filesystem UUID:          82f6661f-9edc-4a2d-80a2-34e2e701f722
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      ext_attr resize_inode dir_index filetype sparse_super
Filesystem flags:         signed_directory_hash 
Default mount options:    (none)
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              983040
Block count:              7855784
Reserved block count:     392789
Free blocks:              7725161
Free inodes:              983029
First block:              0
Block size:               2048
Fragment size:            2048
Reserved GDT blocks:      512
Blocks per group:         16384
Fragments per group:      16384
Inodes per group:         2048
Inode blocks per group:   256
Filesystem created:       Mon Jul 25 20:57:37 2016
Last mount time:          n/a
Last write time:          Mon Jul 25 20:57:38 2016
Mount count:              0
Maximum mount count:      27
Last checked:             Mon Jul 25 20:57:37 2016
Check interval:           15552000 (6 months)
Next check after:         Sat Jan 21 20:57:37 2017
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:          256
Required extra isize:     28
Desired extra isize:      28
Default directory hash:   half_md4
Directory Hash Seed:      083188b6-9e4c-433f-99dd-abe5be0b2b99

fsck: 检查并修复Linux文件系统(通用所有文件系统)

因进程意外终止或系统崩溃的原因导致写入操作时非正常终止时,可能会造成文件损坏,此时应该检测并修复文件西戎,建议离线进行

-t FSTYPE: 指定文件系统类型

-a: 自动修复

-r:交互式修复

e2fsck: 专用于修复ext2/ext3文件系统

e2fsck  [options]  device

-f: 强制检查;

[root@localhost ~]# e2fsck -f  /dev/sda1

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

[root@localhost ~]# e2fsck -y /dev/sdc2
e2fsck 1.41.12 (17-May-2010)
The filesystem size (according to the superblock) is 7855784 blocks
The physical size of the device is 530145 blocks
Either the superblock or the partition table is likely to be corrupt!
Abort? ye

原创文章,作者:Lii,如若转载,请注明出处:http://www.178linux.com/40024

(0)
LiiLii
上一篇 2016-08-25
下一篇 2016-08-25

相关推荐

  • linux系统基础目录结构及功能说明

    linux系统基础目录结构及功能说明 [root@localhost /]# ls bin boot dev etc home host lib lib64 media mnt opt proc root run sbin srv sys tmp usr var /bin:所有用户可用的基本命令程序文件;/sbin:供系统管理使用的工具程序;/boot:引导…

    Linux干货 2018-03-04
  • 第一周博客作业-Linux发行版历史、哲学思想、FHS、命令格式、帮助等

    All + All – 第一周作业 1.计算机组成及功能 计算机组成 硬件 冯诺依曼体系 CPU 运算器 对数据做算暖苏运算和逻辑运算 控制器 寄存器等 程序的运行,是CPU通过调用硬盘中的程序至内存中执行来实现的 存储器 内存 ROM RAM 外存 硬盘 光盘 输入设备 鼠标、麦克风等 实现指令和参数的输入 输出设备 显示器、打印机等 实现结果…

    Linux干货 2017-07-02
  • MySQL/MariaDB数据库备份与恢复

    前言 数据库一般存放着企业最为重要的数据,它关系到企业业务能否正常运转,数据库服务器总会遇到一些不可抗拒因素,导致数据丢失或损坏,而数据库备份可以帮助我们避免由于各种原因造成的数据丢失或着数据库的其他问题。本文将讲解MySQL/MariaDB数据库的几种备份方法。 基础知识 备份类型 完全备份:备份整个数据库 部分备份:仅备份其中的一张表或多张表 增量备份:…

    系统运维 2015-05-23
  • 正则表达式

    正则表达式课程笔记

    2017-11-05
  • Linux下LVM

    LVM(Logic Volume Management,逻辑卷管理         由多个块设备(pv,卷)组成一个逻辑卷组(vg),接着在逻辑组上创建逻辑卷(lv),实现在线缩减逻辑卷与逻辑卷组。 实验:     1、VM虚拟机添加硬盘:…

    Linux干货 2016-06-09
  • 制作本地yum源(以redhat5.8通过复制光盘文件到本地)

    为什么要制作本地yum源 1、RPM安装方式很多情况下不能有效解决复杂的包依赖关系。 2、而刚安装完成系统的YUM一般是通过联网使用。 3、如果是未注册的redhat5.0以上系统,则不能联网使用yum。 我们可以改变yum库的指向,使其指向本地自己制作的yum仓库,从而轻松实现本地yum方式查询、安装应用软件了。 下面据此给大家介绍其操作方法(以Redha…

    Linux干货 2016-04-11