您的位置:首页 > 其它

磁盘及文件系统管理

2015-04-19 23:15 134 查看
磁盘
硬盘采用全密封结构,用以保护精细的盘头机构。从外观上来看,只能看到一个金属盒及裸露在外的
控制电路板及数据线接口、电源接口、跳线等部件。 被密封在净化腔体内的构造主要包括固定面板、电
机和盘头组件等。其中盘头组件是核心部分,主要由浮动磁头组件、磁头驱动定位机构(又称为机械
臂)、盘片和主轴组件组成。 所有的硬盘盘片都装配在一个同心轴上,组成硬盘的数据存储载体。盘片
的双面都能够记录数据,所以每面都设置有读写磁头(最上面一张盘片的上表面和最下面一张盘片的下表
面通常作为保护面使用,不设置读写磁头)。磁盘工作时,主轴电机启动,主轴带动盘片做高速旋转,磁
头驱动定位系统控制读写臂的伸缩,让磁头定位在要读写的数据存储位置,通过读写电路控制磁头的读
写操作,从而完成硬盘的定位和读写。
而磁道就是盘片上用于存储数据的一个个同心圆;由到多个同心圆组的叫柱面;扇区就是划分出来
的一个个存储区域,通常它的大小是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!




查看内核是否读取了分区表,可用命令: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 挂载点 强行终止正在使用此挂载点的进程终端
[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)







归档工具: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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: