Linux初学者学习笔记

20170804 磁盘管理

2017-08-10  本文已影响41人  哈喽别样

目录

  • 磁盘结构
  • 磁盘分区
  • 磁盘分区管理
  • 文件系统管理
  • 挂载

一、磁盘结构

(一)设备文件

mknod filepath {b | c} m n     // b指块设备,c指字符设备,m指主设备号,n指次设备号

(二)磁盘设备文件命名:/dev/DEV_FILE

(三)磁盘物理概念

(四)磁盘寻址

二、磁盘分区

(一)磁盘分区的优势

(二)分区方式:MBR和GPT分区

1. MBR (Master Boot Record) 主引导记录

2. GPT (GUID Partition Table)

(三)磁盘分区的管理

1、parted 命令使用
parted /dev/sdb mklabel gpt|msdos        //建立GPT或MBR分区
parted /dev/sdb print                    //显示磁盘分区情况
parted /dev/sdb mkpart primary 1 200     //建立主分区,大小从1M到200M
parted /dev/sdb rm 1                     //删除编号为1的分区
parted -l                                //列出所有块设备分区情况

2.建立主分区1,大小从1M到1024M
命令:parted /dev/sdb mkpart primary 1 1024

3.建立主分区2,大小从1025M到3072M
命令:parted /dev/sdb mkpart primary 1025 3072

4.删除主分区2
命令:parted /dev/sdb rm 2

2、fdisk 命令使用
fdisk -l [-u] [device...]     //查看分区,使用-u=cylinders选项以柱面为单位查看
#----------------------------------------------------------------------------#
fdisk device                  //管理分区
子命令:
p     //分区列表
t     //更改分区类型
n     //创建新分区
d     //删除分区
v     //校验分区
u     //转换单位
w     //保存并退出
q     //不保存并退出

1.新加一块100G的磁盘/dev/sdb,分别以扇区和柱面为单位查看磁盘分区信息
命令:

fdisk -l /dev/sdb
fdisk -l -u=cylinders /dev/sdb

2.磁盘分区:第一个主分区500M,第二个主分区10G,扩展分区50G,其中第一个逻辑分区20G,第二个逻辑分区占用扩展分区剩余空间
2.1命令fdisk /dev/sdb后,进入提示页面,输入n代表新建分区:
(1)提示选择分区类型,输入p或者直接回车表示新建主分区;
(2)提示选择分区编号,默认1,回车选择默认设置;
(3)提示分区开始扇区,回车按默认设置;
(4)提示分区结束扇区,输入+500M,代表分区大小500M,回车完成第一个主分区设置。其余分区设置基本类似,按提示操作即可。

2.2分区建立完成后,输入p查看分区列表

3.删除第一个20G逻辑分区,查看分区表发现原第二个逻辑分区的命名有了变化,证明磁盘的命名并不稳定,编写脚本时要特别防止代码中出现硬盘设备名称

4.删除50G扩展分区,发现内部的逻辑分区同时被删除

5.不保存分区设置并退出:输入q即可

3、同步分区表
partx -a /dev/device             //同步增加的分区,-a 增加分区
kpartx -a /dev/device            //同步增加的分区,-f 强制同步分区表
partx -d --nr M-N /dev/device    //同步减少的分区,-d 删除分区,-nr 指明删除分区范围
kpartx -d /dev/device            //同步减少的分区
partprobe [/dev/device]     //同步分区

三、文件系统

四、文件系统管理

(一)创建文件系统 mkfs

mkfs.fstype /dev/device        //fstype: ext3,ext4,xfs .etc
mkfs -t fstype /dev/device     //fstype: ext3,ext4,xfs .etc
-t {ext2 | ext3 | ext4}     //分区类型
-b {1024 | 2048 | 4096}     //指定块的大小
-L 'LABEL'                  //指定卷标
-j       //相当于-t ext3,mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3
-i #     //一个inode标识多少字节空间,不要小于block大小,格式化后不能更改
-N #     //指定分区中创建多少个inode
-I #      //一个inode记录占用的磁盘空间大小,范围:128至4096,格式化后不能更改
-m #     //为管理人员预留空间占总空间的百分比,默认5%
-O FEATURE      //启用指定特性
-O ^FEATURE     //关闭指定特性
mkfs.ext3 -L 'USER' /dev/sdb1
mke2fs -t ext4 -b 2048 -i 2048 /dev/sdb2
mkfs -t ext4 -m 2 /dev/sdb3

对/dev/sdb1建立文件系统后,显示的信息中:第一个红框表示卷标设置成功,第二个红框表示默认有5%的分区空间预留给超级用户,第三个红框表示超级块备份到分区的很多地方

对/dev/sdb2建立文件系统后,显示的信息中:红框中的inode数和block数基本相同,这是因为建立文件系统时块大小和每个inode标识块的大小相同。-i选项数值应该大于-b选项值,只有这样产生的inode数才会少于block数。否则,inode数大于block数,多出的inode数就被浪费掉了。

对/dev/sdb3建立文件系统后,显示的信息中:红框中的为超级用户的预留空间为总空间的2%。

(二)管理文件系统

blkid -U UUID      //根据指定的UUID查询设备
blkid -L LABLE     //根据指定的LABLE查询设备
findfs UUID="uuid"       //根据指定的UUID查询设备
findfs LABEL="label"     //根据指定的LABLE查询设备
-l             //查看指定文件系统超级块(superblock)信息
-L 'LABEL'     //修改卷标,也可以使用 e2label /dev/device label 修改
-m #           //修改预留给管理员的空间百分比
-j             //将ext2升级为ext3,即添加日志功能
-O             //文件系统属性启用或禁用,禁用在属性前加^
-o             //调整文件系统的默认挂载选项,禁用在属性前加^
-U UUID        //修改UUID号
tune2fs -l /dev/sdb2
tune2fs -L 'TWO' -m 3 -o acl /dev/sdb2

首先使用-l选项查看当前文件系统的配置信息,第一个红框表明默认挂载选项为空,第二个红框38556/771120=5%表明为管理员预留的5%空间率。

修改文件系统属性后,再次查看,如图红框中所示:增加了acl挂载选项,为管理员预留的空间率变为23133/771120=3%。

dumpe2fs /dev/device        //显示设备的超级块和块组信息
dumpe2fs -h /dev/device     //只显示设备的超级块信息

(三)文件系统检测和修复

e2fsck -y /dev/device     //修复过程自动回答yes 
e2fsck -f /dev/device     //强制检测修复分区,即使分区没问题也执行
dumpe2fs /dev/sdb1 | head -100
dd if=/dev/zero of=/dev/sdb1 bs=1 count=4096
tune2fs -l /dev/sdb1
e2fsck -y /dev/sdb1

首先使用dumpe2fs 命令查看块组信息,如图第2行指明/dev/sdb1分区的主超级块位于块1,下一步考虑破坏块1制造磁盘文件系统损坏

可以看到使用dd命令在对/dev/sdb1分区的前4096字节破坏后,磁盘出现了损坏,提示没有发现有效的系统超级块

可以看到/dev/sdb1修复成功,红框内文件系统状态为clean

五、挂载 mount

(一)mount 挂载命令

-t vsftype     //指定要挂载设备的文件系统类型,不指明系统会检测文件系统类型
-r     //readonly,只读挂载
-w     //read and write, 读写挂载
-n     //不更新/etc/mtab,mount不可见
-a     //自动挂载所有支持自动挂载的设备(在/etc/fstab文件定义,且挂载选项中有auto功能)
-L 'LABEL'     //以卷标指定挂载设备
-U 'UUID'     //以UUID指定要挂载的设备
-B, --bind     //绑定目录到另一个目录上
async           //异步模式
sync            //同步模式——内存更改时同时写磁盘
atime/noatime   //是否更新文件系统文件和目录的atime时间戳
diratime/nodiratime     //是否更新目录的atime时间戳
auto/noauto     //是否支持自动挂载,即是否支持-a选项
exec/noexec     //是否支持在文件系统上运行应用程序
dev/nodev       //是否支持在此文件系统上使用设备文件
suid/nosuid     //是否支持suid和sgid权限
remount         //重新挂载,经常在给只读文件系统增加写属性时配合-rw选项使用
ro              //只读
rw              //读写
user/nouser     //是否允许普通用户挂载此设备,/etc/fstab使用
acl             //启用此文件系统上的acl功能
loop            //使用loop设备
defaults        //相当于rw, suid, dev, exec, auto, nouser, async, and relatime
//first step
mount  -o noatime /dev/sdb1 /mnt/dir1
//second step
mount  -o ro /dev/sdb2 /mnt/dir2
mount -o remount,rw /dev/sdb2 /mnt/dir2
//third step
mount -o nosuid -n /dev/sdb3 /mnt/dir3
//forth step
dd if=/dev/zero of=/app/file1 bs=1M count=500
mkfs -t ext3 /app/file1
mount -o loop /app/file1 /mnt/dir4
//fifth step
mount -B /etc /mnt/dir5
//sixth step
mount  /dev/sdb2 /mnt/dir6
mount  /dev/sdb3 /mnt/dir1

第一步,挂载成功。

第二步,第一次挂载时采用只读模式,导致无法新建文件;重新挂载时改为读写模式,成功新建文件。

第三步,挂载后无论df命令还是mount命令都无法看到/dev/sdb3的挂载信息。

此时,只能从/proc/mounts下才能看到。

将/bin/cat文件拷贝至/mnt/dir3并为其增加suid权限,登录普通用户并尝试访问/etc/shadow文件失败。此时,重新挂载将属性改为suid,再登录普通用户并尝试访问/etc/shadow文件成功。

第四步,使用dd命令创建文件,使用mkfs命令创建文件系统,df结果证明文件也可以挂载。

第五步,mount时使用-B选项成功挂载。此时,发现原目录和挂载点目录下文件完全相同,并且出现了相同文件inode号相同,inode节点数却是1的特殊现象。

第六步,将/dev/sdb2挂载到/mnt/dir6后发现挂载成功,/mnt/dir2和/mnt/dir6都能够访问/dev/sdb2分区内容。将/dev/sdb3挂载到/mnt/dir1后发现挂载成功,但/mnt/dir1访问的是/dev/sdb3分区内容,/dev/sdb1分区内容被隐藏。所以,单个分区可以挂载到不同目录,但不要把几个分区挂载到同一个目录

(二)unmount 卸载命令

// 两个命令均可
lsof mount_point
fuser -v mount_point

在另一个终端用vim访问/mnt/dir1目录内的文件,用lsoffuer -v发现访问程序,使用fuer -km命令强行结束访问分区的vim程序,从而顺利卸载分区。

(三)/etc/fstab 文件

UUID=c825e990-eb35-49b1-9f94-72b06786b612     /mnt/dir1             ext3    defaults        0 0
/app/file1                                    /mnt/dir4             ext3    loop            0 0 
/etc                                          /mnt/dir5             none    bind            0 0

通过blkid查看/dev/sdb1的UUID,用于编辑/etc/fstab文件。编辑完成后,重启系统会按照/etc/fstab的设置启动各个分区。当新添加的配置信息的挂载选项中有auto时(default中有auto,直接写loop或者bind也包含default选项),执行mount -a选项会自动挂载/etc/fstab文件有auto选项的新添加条目。

(四)交换分区:系统内存的补充

-a              //激活所有交换分区
-p priority     //指定优先级,priority=0~32767,值越大优先级越高
fdisk /dev/sdb5
mkswap /dev/sdb5
vim /etc/fstab
swapon -a
swapoff -a

分区时注意改变作为交换分区的分区system id,通过fdisk工具的t选项将id号由默认83改为82

建立swap分区,通过blkid命令可以看到/dev/sdb5已经成为swap分区

vim编辑/etc/fstab文件,增加条目,内容如下:

UUID=2b29e986-cd2c-435e-9431-6636c834a1e5       swap    swap    defaults        0 0

挂载交换分区成功,查看优先级发现系统默认新添加的交换分区优先级低于旧交换分区

再次编辑/etc/fstab文件,将/dev/sdb5分区的挂载选项增加pri值为10,再次挂载交换分区,此时发现/dev/sdb5的优先级最高

(五)挂载移动介质

1. 使用光盘
cp /dev/cdrom filename.iso           //从光盘创建iso文件
mkisofs -r -o filename.iso /path     //将目录下的所有文件打包为iso文件
//first step  将光盘1的内容复制到/app/CentOS_6.9_Final_Everything目录下
cp -r /media/CentOS_6.9_Final/ /app/CentOS_6.9_Final_Everything

//second step  将光盘2的内容复制到/app/CentOS_6.9_Final_Everything目录下
cp -r /media/CentOS_6.9_Final/Packages/* /app/CentOS_6.9_Final_Everything/Packages/

//third step  安装mkdvdiso.sh的依赖isomd5sum
yum install isomd5sum

//final step  执行mkdvdiso.sh生成可启动的iso文件
bash mkdvdiso.sh /app/CentOS_6.9_Final_Everything/ /app/CentOS_6.9_x86_64_Final_Everything.iso
2. 挂载USB介质

(六) 磁盘管理常用工具

df   [options] [files]
-H     //以1000为单位
-h     //以人类易读方式显示
-i     //显示节点号
-T     //显示文件系统类型
du [options] dir
-h     //以人类易读方式显示
-s     //显示摘要信息
if     //从设备文件、文件处输入
of     //输出至文件
bs     //指定输入、输出的块大小
ibs    //一次输入块的大小
obs    //一次输出块的大小
cbs    //一次转化块的大小
skip   //从开头忽略输入的块数
seek   //从开头忽略输出的块数
count  //拷贝记录数

应用:

dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1          //备份MBR
dd if=/dev/zero of=/dev/sda bs=64 count=1 seek=446     //破坏MBR的分区表
dd if=/dev/sda of=/dev/sdb           //将磁盘/dev/sda整体备份至/sdb/sdb
dd if=/dev/sda of=/path/to/image     //将磁盘/dev/sda整体备份为image文件
dd if=/path/to/image of=/dev/sda     //将image文件恢复至磁盘/dev/sda
dd if=/dev/urandom of=/dev/sda       //用随机数据填充硬盘,可用于销毁数据
上一篇 下一篇

猜你喜欢

热点阅读