第十三章、磁盘文件管理

第十三章、磁盘管理

本章内容

磁盘结构

1、分区类型

管理分区

2、管理文件系统

3、挂载设备

管理虚拟内存

设备文件

?I/O Ports: I/O设备地址

?一切皆文件:

open(), read(), write(), close()

?  设备类型:

块设备:block,存取单位“块”,磁盘

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

?  设备文件:关联至一个设备驱动程序,进而能够跟与之对应硬件设备进行通信

?  设备号码:

主设备号:major number, 标识设备类型

次设备号:minor number, 标识同一类型下的不同设备

硬盘接口类型

?  并行:

IDE:133MB/s

SCSI:640MB/s

传数据干扰

?  串口:

SATA:6Gbps

SAS:6Gbps

USB:480MB/s

?  rpm: rotations  per  minute(每分钟转速)

机械硬盘和固态硬盘

?  机械硬盘(HDD):Hard Disk Drive,即是传统普通硬盘,主要由:盘片,磁头,盘片转轴及控制电机,磁头控制器,数据转换器,接口,缓存等几个部分组成。机械硬盘中所有的盘片都装在一个旋转轴上,每张盘片之间是平行的,在每个盘片的存储面上有一个磁头,磁头与盘片之间的距离比头发丝的直径还小,所有的磁头联在一个磁头控制器上,由磁头控制器负责各个磁头的运动。磁头可沿盘片的半径方向运动,加上盘片每分钟几千转的高速旋转,磁头就可以定位在盘片的指定位置上进行数据的读写操作。数据通过磁头由电磁流来改变极性方式被电磁流写到磁盘上,也可以通过相反方式读取。硬盘为精密设备,进入硬盘的空气必须过滤

?  固态硬盘(SSD):Solid State Drive,用固态电子存储芯片阵列而制成的硬盘,由控制单元和存储单元(FLASH芯片、DRAM芯片)组成。固态硬盘在接口的规范和定义、功能及使用方法上与普通硬盘的完全相同,在产品外形和尺寸上也与普通硬盘一致

?  相较于HDD,SSD在防震抗摔、传输速率、功耗、重量、噪音上有明显优势,SSD传输速率性能是HDD的2倍

?  相较于SSD,HDD在价格、容量、使用寿命上占有绝对优势

?  硬盘有价,数据无价,目前SSD不能完全取代HHD

设备文件

?磁盘设备的设备文件命名:/dev/DEV_FILE

?SCSI, SATA, SAS, IDE,USB: /dev/sd

?虚拟磁盘:/dev/vd(虚拟机上的磁盘,像阿里云)

?不同磁盘标识:a-z,aa,ab…(突破26个,aa,ab)

/dev/sda, /dev/sdb, ...

?同一设备上的不同分区:1,2, ...

/dev/sda1, /dev/sda5

(一个电脑上必须要有一个主分区引导电脑,具体一块硬盘上可以没有主分区,图形化查看磁盘分区centos7上gnome-disks,6上palimpsest)

?硬盘存储术语

?head:磁头

?track:磁道

?cylinder: 柱面(把所有的0磁道盘片取出来就0柱面)

早前分区都是以柱面整数倍分区,8M的倍数,centos6还有提示,现在以扇区为单位(不一定是,但不以柱面为单位了)。

?sector: 扇区,512bytes

机械硬盘结构

固态硬盘(SSD)和机械硬盘(HDD)

硬盘存储术语

早起,扇区大小不一样,但是存放的数据量是一样的512字节,造成了资源浪费,于是就出现了ZBR即扇区大小一样存储一样的数据量。

6位一圈存放的扇区数,但有一个起始要去掉,有63扇区,有多少磁道,10位,0-1023总共1024个磁道,磁头数和扇面相等用8个位表示共256个。磁盘大小为256*1024*63*512=8064M,这是老的磁盘,现在大了。

区位记录磁盘扇区结构

ZBR(Zoned Bit Recording)

这是目前磁盘的存放方案,优化方案:如果有经常使用的数据放在外圈编号小的磁道上,同样的转速读取的数据多。

CHS和LBA

?CHS

?采用24bit位寻址(10+8+6)

?其中前10位表示cylinder,中间8位表示head,后面6位表示sector(扇区)。

?最大寻址空间8GB

这种方式寻址淘汰了

?LBA(logical block addressing)

?LBA是一个整数,通过转换成CHS格式完成磁盘具体寻址

?LBA采用48个bit位寻址

?最大寻址空间128PB

?由于CHS寻址方式的寻址空间在大概8GB以内,所以在磁盘容量小于大概8GB时,可以使用CHS寻址方式或是LBA寻址方式;在磁盘容量大于大概8GB时,则只能使用LBA寻址方式

使用分区空间

设备识别

设备分区

创建文件系统

标记文件系统

在/etc/fstab文件中创建条目

挂载新的文件系统

磁盘分区

?  为什么分区

?优化I/O性能

?实现磁盘空间配额限制

?提高修复速度

?隔离系统和程序

?安装多个OS

?采用不同文件系统

分区

?  两种分区方式:MBR,GPT(windows和linux一样)

?  MBR: Master Boot Record,1982年,使用32位表示扇区数,分区不超过2T

MBR最大管理2T的分区,多了管理不了。

?  如何分区:按柱面(8M)

?  0磁道0扇区:512bytes(叫MBR)

446bytes: boot loader

64bytes:分区表

16bytes: 标识一个分区

2bytes: 55AA(结束标志)

?  4个主分区;3主分区+1扩展(N个逻辑分区)

MBR分区结构

?  硬盘主引导记录MBR由4个部分组成

?  主引导程序(偏移地址0000H--0088H),它负责从活动分区中装载,并运行系统引导程序。

?  出错信息数据区,偏移地址0089H--00E1H为出错信息,00E2H--01BDH全为0字节。

?  分区表(DPT,Disk Partition Table)含4个分区项,偏移地址01BEH--01FDH,每个分区表项长16个字节,共64字节为分区项1、分区项2、分区项3、分区项4

?  结束标志字,偏移地址01FE--01FF的2个字节值为结束标志55AA(详见附录1)

MBR结构

MBR中DPT结构

GPT分区

?  GPT:GUID(Globals Unique Identifiers) partition table 支持128个分区,使用64位,支持8Z( 512Byte/block )64Z ( 4096Byte/block)

?  使用128位UUID(Universally Unique Identifier) 表示磁盘和分区 GPT分区表自动备份在头和尾两份,并有CRC校验位,唯一的标示一个对象,使用算法生成,确保唯一性。

?  UEFI (统一扩展固件接口)硬件支持GPT,使操作系统启动

分区突破2T使用GPT

GPT分区结构

保护mbr:较老的分区软件看不到mbr可能直接覆盖信息

EFI部分又可以分为4个区域,EFI信息区(GPT头)、分区表、GPT分区,备份区域

备份区域:备份分区表,防止分区表破坏导致分区信息丢失,且有多个备份。

GPT结构,GPT头和分区表项

列出可用的磁盘设备

?  图形化磁盘管理功能工具:点击“应用程序”->“系统工具”->“磁盘”或执行命令gnome-disks

BIOS+MBR(不支持鼠标)与UEFI+GPT(支持鼠标)

使用fdisk -l /dev/sda查看是什么分区,看到CHS信息一般就是MBR分区格式

管理分区

?  列出块设备

lsblk

?  创建分区使用:

fdisk 创建MBR分区

gdisk 创建GPT分区

parted 高级分区操作(管理GPT,和gdisk差不多)

?  partprobe-重新设置内存中的内核分区表版本

parted命令

?  parted的操作都是实时生效的,小心使用

?  用法:parted [选项]... [设备 [命令 [参数]...]...]

parted /dev/sdb mklabel gpt|msdos(同MBR)

parted /dev/sdb print

parted /dev/sdb mkpart primary 1 200 (默认M)

parted /dev/sdb rm 1

parted -l

分区工具fdisk和gdisk

?gdisk /dev/sdb 类fdisk 的GPT分区工具

?fdisk -l [-u] [device...] 查看分区

?fdisk /dev/sdb 管理分区

?  子命令:

?p 分区列表

?t 更改分区类型

?n 创建新分区

?d 删除分区

?v 校验分区

?u 转换单位

?w 保存并退出

?q 不保存并退出

同步分区表

?  查看内核是否已经识别新的分区:

cat /proc/partations

?  centos6通知内核重新读取硬盘分区表

新增分区用

partx -a /dev/DEVICE

kpartx -a /dev/DEVICE -f: force

删除分区用

partx -d --nr M-N /dev/DEVICE

CentOS 5,7: 使用partprobe

partprobe [/dev/DEVICE]

文件系统

?  文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统

?  从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等

?  支持的文件系统:/lib/modules/`uname –r`/kernel/fs

文件系统类型

?Linux文件系统:ext2(Extended file system), ext3, ext4, xfs(SGI), btrfs(Oracle), reiserfs, jfs(AIX), swap

?光盘:iso9660

?Windows:FAT32, exFAT,NTFS

?Unix: FFS(fast), UFS(unix), JFS2

?网络文件系统:NFS, CIFS

?集群文件系统:GFS2, OCFS2(oracle)

?分布式文件系统: fastdfs,ceph, moosefs, mogilefs, glusterfs, Lustre

?RAW:未经处理或者未经格式化产生的文件系统

(只分区没有创建文件系统叫RAW文件系统)

文件系统分类

?根据其是否支持"journal"功能:

日志型文件系统: ext3, ext4, xfs, ...

非日志型文件系统: ext2, vfat

?文件系统的组成部分:

内核中的模块:ext4, xfs, vfat

用户空间的管理工具:mkfs.ext4, mkfs.xfs,mkfs.vfat

? Linux的虚拟文件系统:VFS

?查前支持的文件系统:cat /proc/filesystems

VFS

用户开发一些软件去访问不同的文件系统的数据时,面对的不是直接的文件系统而是vfs,屏蔽不同文件系统的区别,抽取相同的。

文件系统选择

创建文件系统

mkfs命令:

(1) mkfs.FS_TYPE /dev/DEVICE

ext4

xfs

btrfs

vfat

(2) mkfs -t FS_TYPE /dev/DEVICE

-L ‘LABEL‘: 设定卷标

创建ext文件系统

?  mke2fs:ext系列文件系统专用管理工具

-t {ext2|ext3|ext4}

-b {1024|2048|4096}

-L ‘LABEL‘

-j: 相当于 -t ext3(j相当于日志,3比2多个日志功能)

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:关闭指定特性

文件系统标签

指向设备的另一种方法

与设备无关

blkid:块设备属性信息查看

blkid [OPTION]... [DEVICE]

-U UUID: 根据指定的UUID来查找对应的设备

-L LABEL:根据指定的LABEL来查找对应的设备

e2label:管理ext系列文件系统的LABEL

e2label DEVICE [LABEL]

findfs :查找分区

findfs [options] LABEL=<label>

findfs [options] UUID=<uuid>

tune2fs

?  tune2fs:重新设定ext系列文件系统可调整参数的值

-l:查看指定文件系统超级块信息;super block

-L ‘LABEL‘:修改卷标

-m #:修预留给管理员的空间百分比

-m 1:预留1%

-j: 将ext2升级为ext3

-O: 文件系统属性启用或禁用, –O ^has_journal

-o: 调整文件系统的默认挂载选项,–o ^acl

-U UUID: 修改UUID号,即“”中的号

?  dumpe2fs:

块分组管理,32768块

-h:查看超级块信息,不显示分组信息

超级快和inode table

文件系统检测和修复

?常发生于死机或者非正常关机之后

?挂载为文件系统标记为“no clean”

?注意:一定不要在挂载状态下修复(挂载情况下可能有人在用,取消挂载确定没人在用)

?fsck: File System Check

fsck.FS_TYPE

fsck -t FS_TYPE

-p: 自动修复错误

-r: 交互式修复错误

FS_TYPE一定要与分区上已经文件类型相同

?  e2fsck:ext系列文件专用的检测修复工具

-y:自动回答为yes

-f:强制修复

挂载mount

?  挂载:将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录做为其它文件访问入口的行为

?  卸载:为解除此关联关系的过程

?  把设备关联挂载点:mount Point

mount

?  卸载时:可使用设备,也可以使用挂载点

umount

?挂载点下原有文件在挂载完成后会被临时隐藏

?挂载点目录一般为空

用mount命令挂载文件系统

挂载方法:mount DEVICE MOUNT_POINT

mount:通过查看/etc/mtab文件显示当前已挂载的所有设备

mount [-fnrsvw] [-t vfstype] [-o options] device dir

device:指明要挂载的设备;

(1) 设备文件:例如/dev/sda5

(2) 卷标:-L ‘LABEL‘, 例如 -L ‘MYDATA‘

(3) UUID, -U ‘UUID‘:例如 -U ‘0c50523c-43f1-45e7-85c0-a126711d406e‘

(4) 伪文件系统名称:proc, sysfs, devtmpfs, configfs

dir:挂载点

事先存在;建议使用空目录

进程正在使用中的设备无法被卸载

cat /etc/mtab = mount(centos6)

mount常用命令选项

?-t vsftype:指定要挂载的设备上的文件系统类型

?-r: readonly,只读挂载

?-w: read and write, 读写挂载

?-n: 不更新/etc/mtab,mount不可见

?-a:自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有auto功能)

?-L ‘LABEL‘: 以卷标指定挂载设备

?-U ‘UUID‘: 以UUID指定要挂载的设备

?-B, --bind: 绑定目录到另一个目录上

?查看内核追踪到的已挂载的所有设备

cat /proc/mounts

?    -o options:(挂载文件系统的选项),多个选项使用逗号分隔

async:异步模式(默认写到缓冲区,再写到磁盘,有风险,突然停电,数据丢失,效率高)

sync:同步模式(内存更改时,同时写磁盘,安全,效率低)

atime/noatime:包含目录和文件 (-o noatime 磁盘的读时间不更新)

网站上的读时间屏蔽掉,提高性能。

diratime/nodiratime:目录的访问时间戳

auto/noauto:是否支持自动挂载,是否支持-a选项

exec/noexec:是否支持将文件系统上运行应用程序

dev/nodev:是否支持在此文件系统上使用设备文件

suid/nosuid:是否支持suid和sgid权限(支持suid是很危险的,

例如将vim加入s权限,普通用户使用具有root权限可以修改/etc/shadow,挂载的时候取消)

remount:重新挂载(和其他的选项合用用,隔开方便添加新的功能,也可以先卸载再挂载,但是用人在用就不能卸载了,使用remount方便了这些,同时还是即时生效)

ro:只读

rw:读写

user/nouser:是否允许普通用户挂载此设备,/etc/fstab使用

acl:启用此文件系统上的acl功能(默认没有acl功能)

loop: 使用loop设备(拿文件当分区)

?    defaults:相当于rw, suid, dev, exec, auto, nouser, async

缓冲区buffer:写数据,临时存放写到磁盘的空间

缓存cache:读数据,将经常读的数据临时放到内存中,加快下一次读的时间

卸载命令

?  查看挂载情况

findmnt MOUNT_POINT|device

?  查看正在访问指定文件系统的进程

lsof MOUNT_POINT

fuser -v MOUNT_POINT

?  终止所有在正访问指定的文件系统的进程

fuser -km MOUNT_POINT

?卸载

umount DEVICE

umount MOUNT_POINT

挂载点和/etc/fstab

?配置文件系统体系

?被mount、fsck和其它程序使用

?系统重启时保留文件系统体系

?可以在设备栏使用文件系统卷标

?使用mount -a 命令挂载/etc/fstab中的所有文件系统

文件挂载配置文件

?/etc/fstab每行定义一个要挂载的文件系统(开机自动挂载设备)

?要挂载的设备或伪文件系统

设备文件名

LABEL:LABEL=""

UUID:UUID=""

伪文件系统名称:proc, sysfs

?挂载点

?文件系统类型

?挂载选项:defaults

?转储频率:0:不做备份 1:每天转储 2:每隔一天转储

?自检次序: 0:不自检

1:首先自检;一般只有rootfs才用1,数字大小表示检查的先后顺序

节点不属于文件,但存在与磁盘,想分区表不是文件但存在于磁盘。

处理交换文件和分区

?交换分区是系统RAM的补充

?基本设置包括:

?创建交换分区或者文件

?使用mkswap写入特殊签名

?在/etc/fstab文件中添加适当的条目

?使用swapon -a 激活交换空间

挂载交换分区

?  启用:swapon

swapon [OPTION]... [DEVICE]

-a:激活所有的交换分区;

-p PRIORITY:指定优先级

/etc/fstab:pri=value

?禁用:swapoff [OPTION]... [DEVICE]

SWAP的优先级

?可以指定swap分区0到32767的优先级,值越大优先级越高

?如果用户没有指定,那么核心会自动给swap指定一个优先级,这个优先级从-1开始,每加入一个新的没有用户指定优先级的swap,会给这个优先级减一

?先添加的swap的缺省优先级比较高,除非用户自己指定一个优先级,而用户指定的优先级(是正数)永远高于核心缺省指定的优先级(是负数)

?优化性能:分布存放,高性能磁盘存放

移动介质

?挂载意味着使外来的文件系统看起来如同是主目录树的一部分

?访问前、介质必须被挂载

?摘除时,介质必须被卸载

?按照默认设置,非根用户只能挂载某些设备(光盘、DVD、软盘、USB等等)

?挂载点通常在/media 或/mnt下

使用光盘

?在图形环境下自动启动挂载/run/media/<user>/<label>

?否则就必须被手工挂载

mount /dev/cdrom /mnt/

?eject命令卸载或弹出磁盘

?创建ISO文件

cp /dev/cdrom /root/centos7.iso

mkisofs -r -o /root/etc.iso /etc(把目录打包成iso)

把光盘制成iso

?刻录光盘

wodim –v –eject centos.iso

把iso制成光盘

挂载USB介质

?查看USB设备是否识别

?lsusb

?被内核探测为SCSI设备

?/dev/sdaX、/dev/sdbX、或类似的设备文件

?在图形环境中自动挂载

?图标在[计算机]窗口中创建

?挂载在/run/media/<user>/<label>

?手动挂载

?mount /dev/sdb1 /mnt

常见工具

?  内存空间使用状态:

free [OPTION]

-m: 以MB为单位

-g: 以GB为单位

?文件系统空间占用等信息的查看工具:

df [OPTION]... [FILE]...

-H 以1000为单位

-T 文件系统类型

-h: human-readable

-i:inodes instead of blocks

-P: 以Posix兼容的格式输出

?  查看某目录总体空间占用状态:

du [OPTION]... DIR

-h: human-readable

-s: summary

工具dd

?  dd命令:convert and copy a file

?  用法:

dd if=/PATH/FROM/SRC of=/PATH/TO/DEST

(输入的路径,输出到哪)

bs=#:block size, 复制单元大小(以块为单位)

count=#:复制多少个bs

?  of=file 写到所命名的文件而不是到标准输出

if=file 从所命名文件读取而不是从标准输入

bs=size 指定块大小(既是是ibs也是obs)

ibs=size 一次读size个byte(读的大小)

obs=size 一次写size个byte(写的大小)

cbs=size 一次转化size个byte

skip=blocks 从开头忽略blocks个ibs大小的块

seek=blocks 从开头忽略blocks个obs大小的块

count=n 只拷贝n个记录

?conv=conversion[,conversion...] 用指定的参数转换文件

?转换参数:

?ascii 转换 EBCDIC 为 ASCII

?ebcdic 转换 ASCII 为 EBCDIC

?lcase 把大写字符转换为小写字符

?ucase 把小写字符转换为大写字符

?nocreat 不创建输出文件

?noerror 出错时不停止

?notrunc 不截短输出文件(和前面的skip seek连用)

?sync 把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐

备份MBR:

dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1

破坏MBR中的bootloader:

dd if=/dev/zero of=/dev/sda bs=64 count=1 seek=446

有一个大与2K的二进制文件fileA。现在想从第64个字节位置开始读取,需要读取的大小是128Byts。又有fileB, 想把上面读取到的128Bytes写到第32个字节开始的位置,替换128Bytes,实现如下:

#dd if=fileA of=fileB bs=1 count=128 skip=63 seek=31 conv=notrunc

?  备份:

dd if=/dev/sdx of=/dev/sdy

将本地的/dev/sdx整盘备份到/dev/sdy

dd if=/dev/sdx of=/path/to/image

将/dev/sdx全盘数据备份到指定路径的image文件

dd if=/dev/sdx | gzip >/path/to/image.gz

备份/dev/sdx全盘数据,并利用gzip压缩,保存到指定路径

?  恢复:

dd if=/path/to/image of=/dev/sdx

将备份文件恢复到指定盘

gzip -dc /path/to/image.gz | dd of=/dev/sdx

将压缩的备份文件恢复到指定盘

?  拷贝内存资料到硬盘

dd if=/dev/mem  of=/root/mem.bin bs=1024

/dev/mem 内存数据

将内存里的数据拷贝到root目录下的mem.bin文件

?  从光盘拷贝iso镜像

dd if=/dev/cdrom of=/root/cd.iso

拷贝光盘数据到root文件夹下,并保存为cd.iso文件

?  销毁磁盘数据

dd if=/dev/urandom of=/dev/sda1

利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据,执行此操作以后,/dev/sda1将无法挂载,创建和拷贝操作无法执行

得到最恰当的block size

dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file

dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file

dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file

通过比较dd指令输出中所显示的命令执行时间,即可确定系统最佳的block size大小

?  测试硬盘写速度

dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000

?  测试硬盘读速度

dd if=/root/1Gb.file bs=64k | dd of=/dev/null

?  修复硬盘

dd if=/dev/sda of=/dev/sda

当硬盘较长时间(比如1,2年)放置不使用后,磁盘上会产生消磁点。当磁头读到这些区域时会遇到困难,并可能导致I/O错误。当这种情况影响到硬盘的第一个扇区时,可能导致硬盘报废。上边的命令有可能使这些数据起死回生,且这个过程是安全高效的

dd 不写单位默认是字节为单位

附录:

1、查看分区表内容

[[email protected] ~]#hexdump -C -n 512 /dev/sda

00000000  eb 48 90 10 8e d0 bc 00  b0 b8 00 00 8e d8 8e c0  |.H..............|

00000010  fb be 00 7c bf 00 06 b9  00 02 f3 a4 ea 21 06 00  |...|.........!..|

00000020  00 be be 07 38 04 75 0b  83 c6 10 81 fe fe 07 75  |....8.u........u|

00000030  f3 eb 16 b4 02 b0 01 bb  00 7c b2 80 8a 74 03 02  |.........|...t..|

00000040  80 00 00 80 68 13 05 00  00 08 fa 90 90 f6 c2 80  |....h...........|

00000050  75 02 b2 80 ea 59 7c 00  00 31 c0 8e d8 8e d0 bc  |u....Y|..1......|

00000060  00 20 fb a0 40 7c 3c ff  74 02 88 c2 52 f6 c2 80  |. [email protected]|<.t...R...|

00000070  74 54 b4 41 bb aa 55 cd  13 5a 52 72 49 81 fb 55  |tT.A..U..ZRrI..U|

00000080  aa 75 43 a0 41 7c 84 c0  75 05 83 e1 01 74 37 66  |.uC.A|..u....t7f|

00000090  8b 4c 10 be 05 7c c6 44  ff 01 66 8b 1e 44 7c c7  |.L...|.D..f..D|.|

000000a0  04 10 00 c7 44 02 01 00  66 89 5c 08 c7 44 06 00  |....D...f.\..D..|

000000b0  70 66 31 c0 89 44 04 66  89 44 0c b4 42 cd 13 72  |pf1..D.f.D..B..r|

000000c0  05 bb 00 70 eb 7d b4 08  cd 13 73 0a f6 c2 80 0f  |...p.}....s.....|

000000d0  84 f0 00 e9 8d 00 be 05  7c c6 44 ff 00 66 31 c0  |........|.D..f1.|

000000e0  88 f0 40 66 89 44 04 31  d2 88 ca c1 e2 02 88 e8  |[email protected]|

000000f0  88 f4 40 89 44 08 31 c0  88 d0 c0 e8 02 66 89 04  |[email protected]|

00000100  66 a1 44 7c 66 31 d2 66  f7 34 88 54 0a 66 31 d2  |f.D|f1.f.4.T.f1.|

00000110  66 f7 74 04 88 54 0b 89  44 0c 3b 44 08 7d 3c 8a  |f.t..T..D.;D.}<.|

00000120  54 0d c0 e2 06 8a 4c 0a  fe c1 08 d1 8a 6c 0c 5a  |T.....L......l.Z|

00000130  8a 74 0b bb 00 70 8e c3  31 db b8 01 02 cd 13 72  |.t...p..1......r|

00000140  2a 8c c3 8e 06 48 7c 60  1e b9 00 01 8e db 31 f6  |*....H|`......1.|

00000150  31 ff fc f3 a5 1f 61 ff  26 42 7c be 7f 7d e8 40  |1.....a.&B|..}[email protected]|

00000160  00 eb 0e be 84 7d e8 38  00 eb 06 be 8e 7d e8 30  |.....}.8.....}.0|

00000170  00 be 93 7d e8 2a 00 eb  fe 47 52 55 42 20 00 47  |...}.*...GRUB .G|

00000180  65 6f 6d 00 48 61 72 64  20 44 69 73 6b 00 52 65  |eom.Hard Disk.Re|

00000190  61 64 00 20 45 72 72 6f  72 00 bb 01 00 b4 0e cd  |ad. Error.......|

000001a0  10 ac 3c 00 75 f4 c3 00  00 00 00 00 00 00 00 00  |..<.u...........|

000001b0  00 00 00 00 00 00 00 00  3b c9 06 00 00 00 80 20  |........;...... |

000001c0  21 00 83 aa 28 82 00 08  00 00 00 00 20 00 00 aa  |!...(....... ...|

000001d0  29 82 83 fe ff ff 00 08  20 00 00 80 1a 06 00 fe  |)....... .......|

000001e0  ff ff 83 fe ff ff 00 88  3a 06 00 00 71 02 00 fe  |........:...q...|

000001f0  ff ff 05 fe ff ff 00 88  ab 08 00 78 54 10 55 aa  |...........xT.U.|

00000200

查看sda的前512字节内容,里面包含了分区表内容,不过都是十六进制,前446个字节是启动加载,64个字节分区表,每个分区表占16个字节,共4个分区,多了不能加,55aa标记位。80 20是分区表的开始位置到55 aa结束。

[[email protected] ~]#dd if=/dev/sda of=/app/mbr bs=1  count=512

512+0 records in

512+0 records out

512 bytes (512 B) copied, 0.0048667 s, 105 kB/s

[[email protected] ~]#hexdump -C /app/mbr

备份磁盘的前512个字节

[[email protected] ~]#dd if=/dev/zero of=/dev/sda bs=1 count=64 skip=446 seek=446

64+0 records in

64+0 records out

64 bytes (64 B) copied, 0.0569018 s, 1.1 kB/s

将分区表信息清理掉

[[email protected] ~]#lsblk

NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT

sr0     11:0    1  3.7G  0 rom  /media/CentOS_6.9_Final

sda      8:0    0  200G  0 disk

├─sda1   8:1    0    1G  0 part /boot

├─sda2   8:2    0 48.8G  0 part /

├─sda3   8:3    0 19.5G  0 part /app

├─sda4   8:4    0    1K  0 part

└─sda5   8:5    0    2G  0 part [SWAP]

sdb      8:16   0  100G  0 disk

sdc      8:32   0   80G  0 disk

sdd      8:48   0   60G  0 disk

可以看到虽然讲分区表清理掉了但是还是可以看到分区信息,因为清理掉的是磁盘中的分区表,内存中还有一份,但是重启就生效了,分区表就看不到了

[[email protected] ~]#fdisk -l /dev/sda

Disk /dev/sda: 214.7 GB, 214748364800 bytes

255 heads, 63 sectors/track, 26108 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: 0x0006c93b

Device Boot      Start         End      Blocks   Id  System

这条命令是看磁盘上的分区表,可以看到分区表信息没有了,机器重启就起不来了,因为分区表没了,重启前需要还原分区表或者重启前把备份的分区表通过scp传到别的机器上,进入救援模式还原,或者把硬盘拆下来放到别的机器上还原。

1.1使用光盘还原分区表模式

[[email protected] ~]#scp /app/mbr 172.18.4.253:/app/

The authenticity of host ‘172.18.4.253 (172.18.4.253)‘ can‘t be established.

RSA key fingerprint is 94:8b:1a:76:11:8d:e6:cf:c5:23:a3:57:5f:42:b3:f0.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added ‘172.18.4.253‘ (RSA) to the list of known hosts.

[email protected]‘s password:

先把备份的分区表信息传到另一台机器上

[[email protected] ~]#reboot

重启机器,按F2调整开机项以光盘启动为首选项

进入第三项救援模式

配置网络,不然不能使用scp传输文件

使用DHCP动态分配ip

continue继续进入shell

将备份的文件从远端机器上传输过来

原来使用的桥接模式的网卡,备份传输不过来,只能用主机模式的网卡传输过来。

bash-4.1# dd if=mbr of=/dev/sda bs=1 count=512

bash-4.1#fdisk -l

看到分区表还原成功,exit退出即可

1.2直接还原分区表模式

[[email protected] ~]#dd if=/app/mbr  of=/dev/sda bs=1 count=512

512+0 records in

512+0 records out

512 bytes (512 B) copied, 0.00240875 s, 213 kB/s

[[email protected] ~]#fdisk -l /dev/sda

Disk /dev/sda: 214.7 GB, 214748364800 bytes

255 heads, 63 sectors/track, 26108 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: 0x0006c93b

Device Boot      Start         End      Blocks   Id  System

/dev/sda1   *           1         131     1048576   83  Linux

Partition 1 does not end on cylinder boundary.

/dev/sda2             131        6505    51200000   83  Linux

/dev/sda3            6505        9055    20480000   83  Linux

/dev/sda4            9055       26109   136985600    5  Extended

/dev/sda5            9055        9316     2097152   82  Linux swap / Solaris

可以看到分区信息恢复了。

2、复制分区表

[[email protected] ~]#dd if=/dev/sda of=/dev/sdb bs=1 count=64 skip=446 seek=446

64+0 records in

64+0 records out

64 bytes (64 B) copied, 0.00478312 s, 13.4 kB/s

[[email protected] ~]#fdisk -l /dev/sdb

Disk /dev/sdb: 107.4 GB, 107374182400 bytes

255 heads, 63 sectors/track, 13054 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: 0x00000000

虽然分区表复制过去了,但是磁盘上仍然没有分区信息,因为55aa标志位没有复制过去,所以64要改成66才行。

[[email protected] ~]#dd if=/dev/sda of=/dev/sdb bs=1 count=66 skip=446 seek=446

66+0 records in

66+0 records out

66 bytes (66 B) copied, 0.101824 s, 0.6 kB/s

[[email protected] ~]#fdisk -l /dev/sdb

Warning: invalid flag 0x0000 of partition table 5 will be corrected by w(rite)

Disk /dev/sdb: 107.4 GB, 107374182400 bytes

255 heads, 63 sectors/track, 13054 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: 0x00000000

Device Boot      Start         End      Blocks   Id  System

/dev/sdb1   *           1         131     1048576   83  Linux

Partition 1 does not end on cylinder boundary.

/dev/sdb2             131        6505    51200000   83  Linux

/dev/sdb3            6505        9055    20480000   83  Linux

/dev/sdb4            9055       26109   136985600    5  Extended

可以看到磁盘上的分区信息了,只能复制主分区和扩展分区不能扩展逻辑分区,且sda和sdb大小不一样,这样就不合适了,平时不要这样做,只是试验了。

3、查看分区表的方式

(1)ls   /dev/sd*

(2)lsblk

(3)cat /proc/partitions

(4) fdisk  -l

1-3:是看内存中的分区表

4:磁盘的分区表

4.1 parted命令

内存的数据和磁盘的数据不同步

[[email protected] ~]#parted /dev/sda print

Model: VMware, VMware Virtual S (scsi)

Disk /dev/sda: 215GB

Sector size (logical/physical): 512B/512B

Partition Table: msdos

查看磁盘的分区类型sda是MBR分区类型,打印的是msdos

[[email protected] ~]#parted /dev/sdb mklabel gpt

Information: You may need to update /etc/fstab.

[[email protected] ~]#fdisk -l /dev/sdb

WARNING: GPT (GUID Partition Table) detected on ‘/dev/sdb‘! The util fdisk doesn‘t support GPT. Use GNU Parted.

将sdb的分区类型设为GPT,用fdisk查看提示不支持,使用parted支持。

[[email protected] ~]#parted /dev/sdb mkpart primay 1 1000

Information: You may need to update /etc/fstab.

[[email protected] ~]#parted /dev/sdb print

Model: VMware, VMware Virtual S (scsi)

Disk /dev/sdb: 107GB

Sector size (logical/physical): 512B/512B

Partition Table: gpt

Number  Start   End     Size   File system  Name    Flags

1      1049kB  1000MB  999MB               primay

[[email protected] ~]#parted /dev/sdb rm 2

创建主分区,查看和删除主分区方法,命令实时性,立即生效。

[[email protected] ~]#gdisk /dev/sdb

使用gdisk创建分区,交互式的,?后n添加分区

4.2 fdisk命令创建MBR分区

[[email protected] ~]#parted  /dev/sdb mklabel msdos

将GPT改为MBR,使用上面命令,当然不是转换而是删除原来的分区,再创建新的MBR分区

[[email protected] ~]# fdisk /dev/sdb

WARNING: DOS-compatible mode is deprecated. It‘s strongly recommended to

switch off the mode (command ‘c‘) and change display units to

sectors (command ‘u‘).

Command (m for help):

提示不以柱面为单位敲命令c,以扇区单位敲u,这是centos6,7默认以扇区位单位。分区确定后不能改变大小,只能删除后重新改。UUID是分区的唯一标识,分区名称可能改变,像/dev/sda6可能由于sda5的删除而变成/dev/sda5。

[[email protected] ~]#fdisk /dev/sda -l

Disk /dev/sda: 214.7 GB, 214748364800 bytes

255 heads, 63 sectors/track, 26108 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: 0x0006c93b

Device Boot      Start         End      Blocks   Id  System

/dev/sda1   *           1         131     1048576   83  Linux

Partition 1 does not end on cylinder boundary.

/dev/sda2             131        6505    51200000   83  Linux

/dev/sda3            6505        9055    20480000   83  Linux

/dev/sda4            9055       26109   136985600    5  Extended

/dev/sda5            9055        9316     2097152   82  Linux swap / Solaris

/dev/sda6            9316       10621    10484351   83  Linux

/dev/sda7           10622       11405     6297448+  83  Linux

使用fdisk 创建分区,m打印help,n添加分区,d删除分区,w保存退出,q退出不保存。

[[email protected] ~]#lsblk

NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT

sda      8:0    0  200G  0 disk

├─sda1   8:1    0    1G  0 part /boot

├─sda2   8:2    0 48.8G  0 part /

├─sda3   8:3    0 19.5G  0 part /app

├─sda4   8:4    0    1K  0 part

└─sda5   8:5    0    2G  0 part [SWAP]

sdb      8:16   0  100G  0 disk

sdc      8:32   0   80G  0 disk

sdd      8:48   0   60G  0 disk

sr0     11:0    1  3.7G  0 rom

但是可以看到创建的分区没有写入到内存,没有写入到内存中是没有意义的,因为没有读入到内存就没法去操作它,必须要同步。

[[email protected] ~]#partx -a /dev/sda

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

BLKPG: Device or resource busy

error adding partition 4

BLKPG: Device or resource busy

error adding partition 5

[[email protected] ~]#lsblk

NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT

sda      8:0    0  200G  0 disk

├─sda1   8:1    0    1G  0 part /boot

├─sda2   8:2    0 48.8G  0 part /

├─sda3   8:3    0 19.5G  0 part /app

├─sda4   8:4    0    1K  0 part

├─sda5   8:5    0    2G  0 part [SWAP]

├─sda6   8:6    0   10G  0 part

└─sda7   8:7    0    6G  0 part

sdb      8:16   0  100G  0 disk

sdc      8:32   0   80G  0 disk

sdd      8:48   0   60G  0 disk

sr0     11:0    1  3.7G  0 rom

增加分区同步命令,有一个好用的命令,partprobe,这个命令在centos5he7上特别好用但是在6上不行,只能用上面的命令。

[[email protected] ~]#fdisk /dev/sda

WARNING: DOS-compatible mode is deprecated. It‘s strongly recommended to

switch off the mode (command ‘c‘) and change display units to

sectors (command ‘u‘).

Command (m for help): m

Command (m for help): d

Partition number (1-7): 6

Command (m for help): d

Partition number (1-6): 6

Value out of range.

删除分区6和7两个分区

Command (m for help): p

Disk /dev/sda: 214.7 GB, 214748364800 bytes

255 heads, 63 sectors/track, 26108 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: 0x0006c93b

Device Boot      Start         End      Blocks   Id  System

/dev/sda1   *           1         131     1048576   83  Linux

Partition 1 does not end on cylinder boundary.

/dev/sda2             131        6505    51200000   83  Linux

/dev/sda3            6505        9055    20480000   83  Linux

/dev/sda4            9055       26109   136985600    5  Extended

/dev/sda5            9055        9316     2097152   82  Linux swap / Solaris

使用的fdisk命令看到只剩下sda只剩下5个分区

[[email protected] ~]#lsblk

NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT

sda      8:0    0  200G  0 disk

├─sda1   8:1    0    1G  0 part /boot

├─sda2   8:2    0 48.8G  0 part /

├─sda3   8:3    0 19.5G  0 part /app

├─sda4   8:4    0    1K  0 part

├─sda5   8:5    0    2G  0 part [SWAP]

├─sda6   8:6    0   10G  0 part

└─sda7   8:7    0    6G  0 part

sdb      8:16   0  100G  0 disk

sdc      8:32   0   80G  0 disk

sdd      8:48   0   60G  0 disk

sr0     11:0    1  3.7G  0 rom

但是内存中的sda还是剩下7个分区,还是要同步,但是增加分区的同步命令和减少分区的同步命令是不相同的。

[[email protected] ~]#partx -d --nr 6-7 /dev/sda

[[email protected] ~]#lsblk

NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT

sda      8:0    0  200G  0 disk

├─sda1   8:1    0    1G  0 part /boot

├─sda2   8:2    0 48.8G  0 part /

├─sda3   8:3    0 19.5G  0 part /app

├─sda4   8:4    0    1K  0 part

└─sda5   8:5    0    2G  0 part [SWAP]

sdb      8:16   0  100G  0 disk

sdc      8:32   0   80G  0 disk

sdd      8:48   0   60G  0 disk

sr0     11:0    1  3.7G  0 rom

删除分区,然后同步,6-7是第6分区和第7分区。

[[email protected] ~]#fdisk /dev/sdb

WARNING: DOS-compatible mode is deprecated. It‘s strongly recommended to

switch off the mode (command ‘c‘) and change display units to

sectors (command ‘u‘).

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)

Command (m for help): n

Command action

e   extended

p   primary partition (1-4)

e

Partition number (1-4): 1

First cylinder (1-13054, default 1):

Using default value 1

Last cylinder, +cylinders or +size{K,M,G} (1-13054, default 13054): +50G

Command (m for help): n

Command action

l   logical (5 or over)

p   primary partition (1-4)

l

First cylinder (1-6528, default 1): 5

Last cylinder, +cylinders or +size{K,M,G} (5-6528, default 6528): +10G

Command (m for help): n

Command action

l   logical (5 or over)

p   primary partition (1-4)

p

Partition number (1-4): 2

First cylinder (6529-13054, default 6529):

Using default value 6529

Last cylinder, +cylinders or +size{K,M,G} (6529-13054, default 13054): +5G

Command (m for help): p

Disk /dev/sdb: 107.4 GB, 107374182400 bytes

255 heads, 63 sectors/track, 13054 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: 0x0001fb49

Device Boot      Start         End      Blocks   Id  System

/dev/sdb1               1        6528    52436128+   5  Extended

/dev/sdb2            6529        7182     5253255   83  Linux

/dev/sdb5               5        1310    10490445   83  Linux

Command (m for help): p

Disk /dev/sdb: 107.4 GB, 107374182400 bytes

255 heads, 63 sectors/track, 13054 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: 0x0001fb49

Device Boot      Start         End      Blocks   Id  System

/dev/sdb1               1        6528    52436128+   5  Extended

/dev/sdb2            6529        7182     5253255   83  Linux

/dev/sdb5               5        1310    10490445   83  Linux

Command (m for help): w

The partition table has been altered!

Calling ioctl() to re-read partition table.

Syncing disks.

[[email protected] ~]#lsblk

NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT

sda      8:0    0  200G  0 disk

├─sda1   8:1    0    1G  0 part /boot

├─sda2   8:2    0 48.8G  0 part /

├─sda3   8:3    0 19.5G  0 part /app

├─sda4   8:4    0    1K  0 part

└─sda5   8:5    0    2G  0 part [SWAP]

sdb      8:16   0  100G  0 disk

├─sdb1   8:17   0    1K  0 part

├─sdb2   8:18   0    5G  0 part

└─sdb5   8:21   0   10G  0 part

sdc      8:32   0   80G  0 disk

sdd      8:48   0   60G  0 disk

sr0     11:0    1  3.7G  0 rom

可以看到新的分区不存在同步不同步问题,建立好了直接保存同步到内存。

旧的磁盘可能存在同步失败。

[[email protected] ~]#echo -e ‘n\np\n1\n\n+10G\nw\n‘ |fdisk /dev/sdc

脚本创建分区或多行重定向创建分区

[[email protected] ~]#echo $?

使用上面的命令查看创建的分区是否已经同步到内存了,不同步为1,同步为0

分区好了,接下来是创建文件系统。

5、文件系统

5.1查看支持的文件系统

[[email protected] ~]#ls  /lib/modules/`uname -r`/kernel/fs

autofs4     cifs      dlm       ext2  fat      gfs2  jffs2       nfs         nls       udf

btrfs       configfs  ecryptfs  ext3  fscache  jbd   lockd       nfs_common  squashfs  xfs

cachefiles  cramfs    exportfs  ext4  fuse     jbd2  mbcache.ko  nfsd

查看linux内核支持的文件系统,发现不支持ntfs。现在主要是使用xfs文件系统。

btrfs很强大,但是红帽要抛弃了。其中df看的是分区挂载,fdisk -l查看的是分区。fat是linux和windows都支持

[[email protected] ~]# blkid /dev/sr0

/dev/sr0: UUID="2017-09-06-10-53-42-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"

查看光盘的信息,文件系统类型为iso9660.

5.2创建文件系统

[[email protected] ~]#mkfs.ext4 /dev/sdb2

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

328656 inodes, 1313313 blocks

65665 blocks (5.00%) reserved for the super user

First data block=0

创建sdb2的文件系统位ext4

[[email protected] ~]#blkid /dev/sdb2

/dev/sdb2: UUID="d557d064-4fbf-4a3b-86b6-694c00a4fa27" TYPE="ext4"

查看分区的文件系统类型,创建唯一的UUID

[[email protected] ~]#tune2fs -l /dev/sdb2

tune2fs 1.41.12 (17-May-2010)

Filesystem volume name:   <none>

Last mounted on:          <not available>

Filesystem UUID:          d557d064-4fbf-4a3b-86b6-694c00a4fa27

Filesystem magic number:  0xEF53

Filesystem revision #:    1 (dynamic)

Filesystem features:      has_journal ext_attr resize_inode dir_index filetype extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize

Filesystem flags:         signed_directory_hash

Default mount options:    (none)

Filesystem state:         clean

Errors behavior:          Continue

查看文件系统的详细信息

[[email protected] ~]#blkid /dev/sdb3

/dev/sdb3: UUID="f65e2400-706e-41a2-ac64-48bc7ef7b2b7" TYPE="ext2"

[[email protected] ~]#tune2fs -O has_journal  /dev/sdb3

tune2fs 1.41.12 (17-May-2010)

Creating journal inode: done

This filesystem will be automatically checked every 31 mounts or

180 days, whichever comes first.  Use tune2fs -c or -i to override.

[[email protected] ~]#blkid /dev/sdb3

/dev/sdb3: UUID="f65e2400-706e-41a2-ac64-48bc7ef7b2b7" SEC_TYPE="ext2" TYPE="ext3"

将ext2文件系统转化为ext3

[[email protected] ~]#tune2fs -O ^has_journal  /dev/sdb3

tune2fs 1.41.12 (17-May-2010)

[[email protected] ~]#blkid /dev/sdb3

/dev/sdb3: UUID="f65e2400-706e-41a2-ac64-48bc7ef7b2b7" TYPE="ext2"

去掉日志功能使得ext3转化为ext2,可以发现UUID是没有变的,只要不格式化创建新的文件系统是不会变的,sda6可能变成sda但UUID是不会变的。

tune2fs只是针对ext系列的文件系统

[[email protected] ~]# blkid

/dev/mapper/VolGroup00-LogVol01: TYPE="swap"

/dev/mapper/VolGroup00-LogVol00: UUID="cb99757b-ed8f-4f7a-9a99-87535512f7c9" TYPE="ext3"

/dev/sda1: LABEL="/boot" UUID="a4720595-2d9a-4a6e-8673-25a7facb1244" TYPE="ext3"

/dev/hdc: LABEL="RHEL/5.4 i386 DVD" TYPE="iso9660"

/dev/VolGroup00/LogVol00: UUID="cb99757b-ed8f-4f7a-9a99-87535512f7c9" TYPE="ext3"

/dev/VolGroup00/LogVol01: TYPE="swap"

将来表示一个分区一个方法是写设备名sda*,另一个方法时写UUID,还有一个方法时写卷标,其中的LABEL是卷标。推荐使用UUID。

[[email protected] ~]#e2label  /dev/sdb3    /mnt/sdb3

[[email protected] ~]#blkid

/dev/sr0: LABEL="CentOS_6.9_Final" TYPE="iso9660"

/dev/sdb2: UUID="d557d064-4fbf-4a3b-86b6-694c00a4fa27" TYPE="ext4"

/dev/sdb3: UUID="f65e2400-706e-41a2-ac64-48bc7ef7b2b7" TYPE="ext2" LABEL="/mnt/sdb3"

/dev/sda1: UUID="0ee7af59-dbdb-4156-a25a-d2f3bd24fa5a" TYPE="ext4"

/dev/sda2: UUID="044e06d4-9b70-4a1e-a9ac-74bcb52649a3" TYPE="ext4"

/dev/sda3: UUID="85b9a743-eee0-4b9b-b26c-ecaf80358c2a" TYPE="ext4"

/dev/sda5: UUID="f43e5474-ecc0-47fe-b459-152e686eb446" TYPE="swap"

添加卷标,最好将分区的挂载点设为卷标名

[[email protected] ~]#tune2fs  -o acl /dev/sdb3

tune2fs 1.41.12 (17-May-2010)

[[email protected] ~]#tune2fs  -o ^acl /dev/sdb3

centos6手工分的分区没有acl功能,需要自己添加,^是删除。没有acl功能,挂载后是不能设定文件的acl的。7上面自动就有acl功能。

[[email protected] ~]#tune2fs  -l /dev/sdb3

tune2fs 1.41.12 (17-May-2010)

Filesystem volume name:   /mnt/sdb3

Last mounted on:          <not available>

Filesystem UUID:          f65e2400-706e-41a2-ac64-48bc7ef7b2b7

Filesystem magic number:  0xEF53

Filesystem revision #:    1 (dynamic)

Filesystem features:      ext_attr resize_inode dir_index filetype sparse_super large_file

Filesystem flags:         signed_directory_hash

Default mount options:    acl

Filesystem state:         clean

Errors behavior:          Continue

Filesystem OS type:       Linux

Inode count:              131648

Block count:              526128

Reserved block count:     26306

Free blocks:              517080

Free inodes:              131637

First block:              0

Block size:               4096

Fragment size:            4096

Reserved GDT blocks:      128

Blocks per group:         32768

Fragments per group:      32768

Inodes per group:         7744

Inode blocks per group:   484

Filesystem created:       Sat Dec  2 20:22:58 2017

Last mount time:          n/a

Last write time:          Sat Dec  2 21:04:56 2017

Mount count:              0 每次挂载都涨1

Maximum mount count:      31 挂载次数达到这个数或6个月开始检查,检查后清零。

Last checked:             Sat Dec  2 20:22:58 2017

Check interval:           15552000 (6 months)

Next check after:         Thu May 31 20:22:58 2018

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:      fd9aa6d8-8508-4e60-8389-1eb085a82f0b

Journal backup:           inode blocks

查看文件系统的信息,即文件系统的元数据。

[[email protected] ~]#dd if=/dev/zero of=/dev/sdb3 bs=1M count=10

10+0 records in

10+0 records out

10485760 bytes (10 MB) copied, 0.513659 s, 20.4 MB/s

[[email protected] ~]#tune2fs  -l /dev/sdb3

tune2fs 1.41.12 (17-May-2010)

tune2fs: Bad magic number in super-block while trying to open /dev/sdb3

Couldn‘t find valid filesystem superblock.

[[email protected] ~]#fsck /dev/sdb3

破坏文件系统使用fsck修复,当然修复也有可能导致数据丢失的,另外挂载的时候是千万不能修复的,必须要卸载了修复。

[[email protected] ~]#mkfs.ext4 -b 1024 /dev/sdb3

指定文件系统块block的大小

[[email protected] ~]#blkid -U 1d409b63-d060-40e3-9ce8-9949128a0a13

/dev/sdb5

[[email protected] ~]#blkid -L /mnt/sdb3

通过UUID和卷标查询设备名

6、超级块和分组情况

[[email protected] ~]#dumpe2fs  /dev/sdb3 | less

Group 0: (Blocks 1-8192) [ITABLE_ZEROED]

Checksum 0x4078, unused inodes 501

Primary superblock at 1, Group descriptors at 2-10

Reserved GDT blocks at 11-266

Block bitmap at 267 (+266), Inode bitmap at 283 (+282)

Inode table at 299-426 (+298)

5832 free blocks, 501 free inodes, 2 directories, 501 unused inodes

Free blocks: 2361-8192

Free inodes: 12-512

Group 1: (Blocks 8193-16384) [INODE_UNINIT, ITABLE_ZEROED]

Checksum 0x2acc, unused inodes 512

Backup superblock at 8193, Group descriptors at 8194-8202

Reserved GDT blocks at 8203-8458

Block bitmap at 268 (+4294959371), Inode bitmap at 284 (+4294959387)

Inode table at 427-554 (+4294959530)

7926 free blocks, 512 free inodes, 0 directories, 512 unused inodes

Free blocks: 8459-16384

Free inodes: 513-1024

查看每个分区上的分组情况,每个组有多少块。超级块有备份,在某些组上面。

创建文件系统的时候会提示你超级块在哪有备份。

[[email protected] ~]#dumpe2fs  /dev/sdb3 | grep -i backup

dumpe2fs 1.41.12 (17-May-2010)

Journal backup:           inode blocks

Backup superblock at 8193, Group descriptors at 8194-8202

Backup superblock at 24577, Group descriptors at 24578-24586

Backup superblock at 40961, Group descriptors at 40962-40970

Backup superblock at 57345, Group descriptors at 57346-57354

Backup superblock at 73729, Group descriptors at 73730-73738

Backup superblock at 204801, Group descriptors at 204802-204810

Backup superblock at 221185, Group descriptors at 221186-221194

Backup superblock at 401409, Group descriptors at 401410-401418

Backup superblock at 663553, Group descriptors at 663554-663562

Backup superblock at 1024001, Group descriptors at 1024002-1024010

Backup superblock at 1990657, Group descriptors at 1990658-1990666

查看超级块的备份情况

[[email protected] ~]#dd if=/dev/zero of=/dev/sdb5 bs=1M count=10

10+0 records in

10+0 records out

10485760 bytes (10 MB) copied, 0.308582 s, 34.0 MB/s

[[email protected] ~]#tune2fs  -l /dev/sdb5

tune2fs 1.41.12 (17-May-2010)

tune2fs: Bad magic number in super-block while trying to open /dev/sdb5

Couldn‘t find valid filesystem superblock.

[[email protected] ~]#fsck  -a  /dev/sdb5

fsck from util-linux-ng 2.17.2

e2fsck 1.41.12 (17-May-2010)

fsck.ext2: Superblock invalid, trying backup blocks...

将超级块清零,然后恢复超级块,fsck -a 一直回答y。

[[email protected] ~]# xfs

xfs_admin      xfs_estimate   xfsinvutil     xfs_mkfile     xfs_rtcp

xfs_bmap       xfs_freeze     xfs_io         xfs_ncheck

xfs_copy       xfs_fsr        xfs_logprint   xfs_quota

xfs_db         xfs_growfs     xfs_mdrestore  xfs_repair

xfsdump        xfs_info       xfs_metadump   xfsrestore

查看文件系统xfs自己的工具集

面试题:两个文件取交集

[[email protected] ~]#grep -f f1 f2

-f选项取得是将f1的内容作为f2的模式匹配

7、挂载和卸载

分完分区了,做完文件系统的创建了,接下来就是挂载了,不然分区不能用。

一个挂载点同一时间只能挂一个设备,一个设备可以挂多个挂载点。

[[email protected] /]#mount /dev/sdb2 /mnt/sdb2

将分区sdb2挂载到/mnt/sdb2

[[email protected] ~]#cd /mnt/sdb2/

[[email protected] /]#umount /dev/sdb2

umount: /mnt/sdb2: device is busy.

(In some cases useful info about processes that use

the device is found by lsof(8) or fuser(1))

当别的终端在使用的时候是不能卸载挂载点的,可以使用lsof和fuser查看

[[email protected] /]#lsof /dev/sdb2

COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

bash    2504 root  cwd    DIR   8,18     4096    2 /mnt/sdb2

[[email protected] /]#fuser -v /mnt/sdb2/

USER        PID ACCESS COMMAND

/mnt/sdb2/:          root       2504 ..c.. bash

可以看到谁正在使用分区,其中fuser -k是杀掉进程,但是会导致数据丢失。

[[email protected] /]#echo please leave > /dev/pts/1

w看谁在用,并告诉其离开

[[email protected] /]#findmnt /mnt/sdb2

TARGET    SOURCE    FSTYPE OPTIONS

/mnt/sdb2 /dev/sdb2 ext4   rw,relatime,barrier=1,data=ordered

查看某个目录是否是挂载点,是挂载点显示信息,不是不显示信息。

[[email protected] /]#mount /dev/sdb2 /mnt/sdb2/

[[email protected] /]#cat /etc/mtab

/dev/sda2 / ext4 rw 0 0

proc /proc proc rw 0 0

sysfs /sys sysfs rw 0 0

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

tmpfs /dev/shm tmpfs rw 0 0

/dev/sda3 /app ext4 rw 0 0

/dev/sda1 /boot ext4 rw 0 0

none /proc/sys/fs/binfmt_misc binfmt_misc rw 0 0

/dev/sdb2 /mnt/sdb2 ext4 rw 0 0

只要查看到挂载信息,/etc/mtab的信息就会立马更新,不让它更新挂载时要加是-n选项,但是-n选项加上后df或mount也看不到挂载信息,只会在挂载点的目录下看到有lost+found目录,这就是挂载成功,起到了挂载隐藏的作用,但findmnt可以发现。

[[email protected] /mnt/sdb2]#mkdir /app/sdb2

[[email protected] /mnt/sdb2]#mount /mnt/sdb2 /app/sdb2 -B

目录挂目录,节点编号一样,进入两个目录看到的内容一样。

[[email protected] /mnt/sdb2]#mount -o remount,exec /mnt/sdb2

相当于取消挂载再挂载,可以添加别的特性

[[email protected] /mnt/sdb2]#cp /dev/zero /mnt/sdb2/ -a

[[email protected] /mnt/sdb2]#ll /mnt/sdb2/

total 16

drwx------ 2 root root 16384 Dec  2 20:12 lost+found

crw-rw-rw- 1 root root  1, 5 Dec  5 07:51 zero

创建一个设备文件,-a选项必需要加,是保留原属性。

[[email protected] /mnt/sdb2]#mount -o remount,nodev /mnt/sdb2

[[email protected] /mnt/sdb2]#dd if=/mnt/sdb2/zero of=/app/f2 bs=1m count=10

dd: invalid number `1m‘

[[email protected] /mnt/sdb2]#dd if=/mnt/sdb2/zero of=/app/f2 bs=1M count=10

dd: opening `/mnt/sdb2/zero‘: Permission denied

禁止后,挂载点下面的设备文件不能用。

[[email protected] /mnt/sdb2]#tune2fs  -o acl /dev/sdb2

tune2fs 1.41.12 (17-May-2010)

[[email protected] /mnt/sdb2]#tune2fs  -o ^acl /dev/sdb2

tune2fs 1.41.12 (17-May-2010)

将一个设备添加和删除acl功能,好像前面已经写过了,不过我忘了,知识点太多了,永久生效,保存到磁盘上

[[email protected] /]#mount -o remout,acl /mnt/sdb2

使挂载点支持acl功能,临时挂载,临时生效,重启机器失效。

[[email protected] /]#mount

/dev/sda2 on / type ext4 (rw)

proc on /proc type proc (rw)

sysfs on /sys type sysfs (rw)

devpts on /dev/pts type devpts (rw,gid=5,mode=620)

tmpfs on /dev/shm type tmpfs (rw)

/dev/sda3 on /app type ext4 (rw)

/dev/sda1 on /boot type ext4 (rw)

none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

/mnt/sdb2 on /app/sdb2 type none (rw,bind)

/mnt/sdb2 on /app/sdb2 type none (rw,bind,remout,acl)

显示挂载的信息和添加的属性。

[[email protected] /app]#dd if=/dev/zero  of=partfile bs=1G count=1

1+0 records in

1+0 records out

1073741824 bytes (1.1 GB) copied, 183.428 s, 5.9 MB/s

[[email protected] /app]#dd if=/dev/zero  of=partfile bs=1M count=1024M

dd: writing `partfile‘: No space left on device

19498+0 records in

19497+0 records out

20445016064 bytes (20 GB) copied, 718.9 s, 28.4 MB/s

其中的bs=1G是直接从内存中开辟1G的内存空间,然后添加数据,然后写到磁盘,没有一个G空间,需要启用swap空间,1M直接使用就行,写完1M写磁盘,这样就可用了。

[[email protected] /app]#free

total       used       free     shared    buffers     cached

Mem:       1004112     933704      70408          0       3020     795332

-/+ buffers/cache:     135352     868760

Swap:      2097148      59232    2037916

内存是1G

[[email protected] /app]#dd if=/dev/zero  of=partfile bs=3G count=1

dd: memory exhausted

内存和交换分区可用量还不够3G,直接内存溢出。

[[email protected] /app]#mkfs.ext4 partfile

对生成的文件创建文件系统,但不能分区,没有设定柱面等。

[[email protected] ~]#blkid /app/partfile

/app/partfile: UUID="167224ff-d057-4615-963c-d5583e0d8475" TYPE="ext4"

可以看到创建的文件系统成功

[[email protected] ~]#mkdir /mnt/part

[[email protected] ~]#mount /app/partfile  /mnt/part/

mount: /app/partfile is not a block device (maybe try `-o loop‘?)

[[email protected] ~]#mount /app/partfile  /mnt/part/ -o loop

挂载分区,可以看到必需要加上 -o loop选项,loop是回环的意思,使用loop设备(拿文件当分区)。通常是设备往目录挂,现在是文件往目录挂,文件和目录都是文件,即文件挂文件,即为回环。

[[email protected] ~]#df

Filesystem     1K-blocks    Used Available Use% Mounted on

/dev/sda2       50264772 5101080  42603692  11% /

tmpfs             502056      72    501984   1% /dev/shm

/dev/sda3       20027260 2837488  16165772  15% /app

/dev/sda1         999320   34924    911968   4% /boot

/app/partfile    2683040    4104   2539316   1% /mnt/part

可以看到文件系统创建和挂载成功

[[email protected] ~]#blkid

/dev/sr0: LABEL="CentOS_6.9_Final" TYPE="iso9660"

/dev/sdb2: UUID="d557d064-4fbf-4a3b-86b6-694c00a4fa27" TYPE="ext4" LABEL="/mnt/sdb2"

/dev/sdb3: UUID="9c74629d-0b64-45f9-9ea6-c50bcf92e21f" TYPE="ext4"

/dev/sda1: UUID="0ee7af59-dbdb-4156-a25a-d2f3bd24fa5a" TYPE="ext4"

/dev/sda2: UUID="044e06d4-9b70-4a1e-a9ac-74bcb52649a3" TYPE="ext4"

/dev/sda3: UUID="85b9a743-eee0-4b9b-b26c-ecaf80358c2a" TYPE="ext4"

/dev/sda5: UUID="f43e5474-ecc0-47fe-b459-152e686eb446" TYPE="swap"

/dev/sdb5: UUID="1d409b63-d060-40e3-9ce8-9949128a0a13" SEC_TYPE="ext2" TYPE="ext3

blkid默认是显示设备文件,访问一次就会记住了,blkid /app/partfile。只有带有文件系统的文件挂载了才会显示,使用文件文件系统好处是以后想转移这的数据,直接将partfile拷贝走到另外的机器,直接再将partfile挂载到一个目录就行了,即可看到里面的文件。

[[email protected] ~]#ll /dev/loop*

brw-rw---- 1 root disk 7, 0 Dec  5 10:38 /dev/loop0

brw-rw---- 1 root disk 7, 1 Dec  5 10:38 /dev/loop1

brw-rw---- 1 root disk 7, 2 Dec  5 10:38 /dev/loop2

brw-rw---- 1 root disk 7, 3 Dec  5 10:38 /dev/loop3

brw-rw---- 1 root disk 7, 4 Dec  5 10:38 /dev/loop4

brw-rw---- 1 root disk 7, 5 Dec  5 10:38 /dev/loop5

brw-rw---- 1 root disk 7, 6 Dec  5 10:38 /dev/loop6

brw-rw---- 1 root disk 7, 7 Dec  5 10:38 /dev/loop

挂载后文件和/dev/loop0关联。centos6有默认8个loop文件,7中不限制。

[[email protected] ~]#mknod /dev/loop8 b 7 8

[[email protected] ~]#ll /dev/loop*

brw-rw---- 1 root disk 7, 0 Dec  5 10:38 /dev/loop0

brw-rw---- 1 root disk 7, 1 Dec  5 10:38 /dev/loop1

brw-rw---- 1 root disk 7, 2 Dec  5 10:38 /dev/loop2

brw-rw---- 1 root disk 7, 3 Dec  5 10:38 /dev/loop3

brw-rw---- 1 root disk 7, 4 Dec  5 10:38 /dev/loop4

brw-rw---- 1 root disk 7, 5 Dec  5 10:38 /dev/loop5

brw-rw---- 1 root disk 7, 6 Dec  5 10:38 /dev/loop6

brw-rw---- 1 root disk 7, 7 Dec  5 10:38 /dev/loop7

brw-r--r-- 1 root root 7, 8 Dec  5 11:00 /dev/loop8

centos6中可以再创建loop设备,需要修改权限,chmod 660 /dev/loop8,设备名称和文件自动关联的。重启后loop8丢失。改文件,vim /boot/grub/grub.conf

在有关kernel的最后加上max_loop=100,即为最大100,即生成100个loop设备。

[[email protected] /app]#losetup /dev/loop8 /app/partfile1

[[email protected] /app]#mkdir /mnt/part1

[[email protected] /app]#mount /dev/loop8 /mnt/part1

[[email protected] /app]#df

Filesystem     1K-blocks    Used Available Use% Mounted on

/dev/sda2       50264772 5101096  42603676  11% /

tmpfs             502056      72    501984   1% /dev/shm

/dev/sda3       20027260 3042288  15960972  17% /app

/dev/sda1         999320   34924    911968   4% /boot

/app/partfile    2683040    4104   2539316   1% /mnt/part

/dev/loop8        194241    1550    182451   1% /mnt/part1

将文件partfile1和/dev/loop8关联起来,挂载loop8就是挂载partfile1,不用再加-o loop因为loop8是设备。

[[email protected] /app]#losetup -a

/dev/loop0: [0803]:13 (/app/partfile)

/dev/loop8: [0803]:15 (/app/partfile1)

查看对应关系。

[[email protected] ~]#vim /etc/fstab

UUID=044e06d4-9b70-4a1e-a9ac-74bcb52649a3 /                       ext4    defaults        1 1

UUID=85b9a743-eee0-4b9b-b26c-ecaf80358c2a /app                    ext4    defaults        1 2

UUID=0ee7af59-dbdb-4156-a25a-d2f3bd24fa5a /boot                   ext4    defaults        1 2

UUID=f43e5474-ecc0-47fe-b459-152e686eb446 swap                    swap    defaults        0 0

tmpfs                   /dev/shm                tmpfs   defaults        0 0

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

sysfs                   /sys                    sysfs   defaults        0 0

proc                    /proc                   proc    defaults        0 0

/dev/sdb2               /mnt/sdb2               ext4    defaults        0 3

设置开机自动挂载

[[email protected] ~]#mount -l

/dev/sda2 on / type ext4 (rw)

proc on /proc type proc (rw)

sysfs on /sys type sysfs (rw)

devpts on /dev/pts type devpts (rw,gid=5,mode=620)

tmpfs on /dev/shm type tmpfs (rw)

/dev/sda3 on /app type ext4 (rw)

/dev/sda1 on /boot type ext4 (rw)

none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

[[email protected] ~]#mount -a

[[email protected] ~]#mount -l

/dev/sda2 on / type ext4 (rw)

proc on /proc type proc (rw)

sysfs on /sys type sysfs (rw)

devpts on /dev/pts type devpts (rw,gid=5,mode=620)

tmpfs on /dev/shm type tmpfs (rw)

/dev/sda3 on /app type ext4 (rw)

/dev/sda1 on /boot type ext4 (rw)

none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

/dev/sdb2 on /mnt/sdb2 type ext4 (rw)

写好配置文件后不能直接生效使用mount -a生效。

[[email protected] ~]#mount -a

[[email protected] ~]#mount

/dev/sda2 on / type ext4 (rw)

proc on /proc type proc (rw)

sysfs on /sys type sysfs (rw)

devpts on /dev/pts type devpts (rw,gid=5,mode=620)

tmpfs on /dev/shm type tmpfs (rw)

/dev/sda3 on /app type ext4 (rw)

/dev/sda1 on /boot type ext4 (rw)

none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

/dev/sdb2 on /mnt/sdb2 type ext4 (rw)

[[email protected] ~]#mount -o remount /dev/sdb2

[[email protected] ~]#mount

/dev/sda2 on / type ext4 (rw)

proc on /proc type proc (rw)

sysfs on /sys type sysfs (rw)

devpts on /dev/pts type devpts (rw,gid=5,mode=620)

tmpfs on /dev/shm type tmpfs (rw)

/dev/sda3 on /app type ext4 (rw)

/dev/sda1 on /boot type ext4 (rw)

none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

/dev/sdb2 on /mnt/sdb2 type ext4 (ro)

在改fstab中关于sdb2的信息使用此命令不会生效,需要使用remount选项生效

[[email protected] ~]#uuidgen

c39bfca8-9bc5-4764-bae5-133b16d17ef8

生成新的UUID

[[email protected] ~]#tune2fs  -U c39bfca8-9bc5-4764-bae5-133b16d17ef8 /dev/sdb2

tune2fs 1.41.12 (17-May-2010)

[[email protected] ~]#blkid /dev/sdb2

/dev/sdb2: UUID="c39bfca8-9bc5-4764-bae5-133b16d17ef8" TYPE="ext4" LABEL="/mnt/sdb2"

改变分区的UUID,这个会出现一个严重的问题就是重启开机检测的时候系统会检测sdb2但是UUID改变,就找不到了,出现重启机器启动不了

解决办法:

发现开机启动不了,看提示信息输入root密码进入

修改fstab文件发现是只读,修改不了。因为把根挂载的时候是以只读方式挂载的。

[[email protected] ~]#mount -o remount,rw  /

修改根的挂载方式为可读写,这样就可以修改fstab文件了,重启成功。

希望以后检测改为0

挂分区成功了但是挂文件怎么挂,但是这个文件不是普通文件,是ext4的文件

[[email protected] ~]#vim /etc/fstab

/app/partfile           /mnt/part           ext4    defaults,loop   0 0

[[email protected] ~]#mount -a

[[email protected] ~]#mount

/dev/sda2 on / type ext4 (rw)

none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

/app/partfile on /mnt/part type ext4 (rw,loop=/dev/loop0)

挂载成功

光盘挂载怎么写

/dev/sr0    /mnt/cdrom  iso9660   default   0   0

虽然是default,包括rw但是光盘是只读,最后显示还是ro

目录挂目录

/ect/sysconfig   /mnt/sysconfig  none  bind  0    0

不是文件系统不是独立分区,文件系统写none,bind是绑定,目录绑定目录。

mount挂载的时候文件系统自动识别,识别不了可能是文件系统丢失,或没有文件系统,或没格式化创建文件系统。

8、交换分区

注意:一般在生产中换硬盘是不断电的,换内存断电。

8.1增加交换分区,放在磁盘的外圈,速度快。

[[email protected] ~]#fdisk  /dev/sdd

Command (m for help): t

Selected partition 1

Hex code (type L to list codes): L

0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris

1  FAT12           39  Plan 9          82  Linux swap / So c1

-t设新建的分区为82交换分区

8.2

[[email protected] ~]#mkswap /dev/sdd1

Setting up swapspace version 1, size = 2104476 KiB

no label, UUID=b4fc70c7-a081-42fa-9a99-63abb0199de1

创建swap文件系统类型

8.3

[[email protected] ~]#vim /etc/fstab

UUID=b4fc70c7-a081-42fa-9a99-63abb0199de1 swap  swap defaults  0   0

写入fstab开机自动挂载

[[email protected] ~]#swapon -a

使用mount -a不生效,因为是特殊的文件系统,使用上面的命令生效

[[email protected] ~]#swapon -s

Filename                                Type            Size    Used    Priority

/dev/sda5                               partition       2097148    0          -1

/dev/sdd1                               partition       2104476    0          -2

查看swap分区

[[email protected] ~]#vim /etc/fstab

UUID=b4fc70c7-a081-42fa-9a99-63abb0199de1 swap  swap pri=10  0   0

修改优先级使得在外圈的sdd1先生效。

[[email protected] ~]#swapon -a

不生效,因为已经读入了

[[email protected] ~]#swapoff  /dev/sdd1

先关闭

[[email protected] ~]#swapon -a

再生效

迁移swap的时候先要看看swap是否正在使用。

swapoff   /swapfile

cp /swapfile   /app后删除

再修改挂载关系

9、移动介质挂载

[[email protected] ~]# ls /misc/

[[email protected] ~]# cd /misc/

[[email protected] misc]# ls cd/

CentOS_BuildTag  EULA  images    LiveOS    repodata              RPM-GPG-KEY-CentOS-Testing-7

EFI              GPL   isolinux  Packages  RPM-GPG-KEY-CentOS-7  TRANS.TBL

[[email protected] misc]# df

Filesystem     1K-blocks    Used Available Use% Mounted on

/dev/sda2       51474912 3771372  45065716   8% /

devtmpfs          485352       0    485352   0% /dev

tmpfs             499860       0    499860   0% /dev/shm

tmpfs             499860    7260    492600   2% /run

tmpfs             499860       0    499860   0% /sys/fs/cgroup

/dev/sda3       20511312  145316  19301036   1% /app

/dev/sda1         999320  130824    799684  15% /boot

tmpfs              99972      24     99948   1% /run/user/0

/dev/sr0         8490330 8490330         0 100% /misc/cd

光盘不会自动挂载到/misc/cd,但你一旦访问目录就会自动挂载,让普通用户也能使用光盘了。

[[email protected] misc]# cp /dev/sr0  /app/centos.iso

^C

[[email protected] misc]# file /app/centos.iso

/app/centos.iso: # ISO 9660 CD-ROM filesystem data ‘CentOS 7 x86_64‘ (bootable)

linux中利用光盘制作iso镜像文件十分简单不需要什么第三方软件,cp搞定可以正常使用,dd if=/dev/sr0 of=/app/centos.iso bs= count= 也行

制作yum源,把iso制作成光盘的yum源,把iso文件拷到电脑上,挂上一个文件夹,把文件夹作为yum源路径,baseurl指向他就行。把挂载写到fstab文件中

/app/centosl.iso /mnt/iso iso9660 loop 0 0

合并centos6的两个光盘,centos官方网站使用脚本制成和集网址https://wiki.centos.org/zh-tw/TipsAndTricks/CDtoDVDMedia?highlight=%28mkdvdiso.sh%29

在命令模式下输入:set noai然后粘贴就是原格式粘贴

[[email protected] /app]#./mkdvdiso.sh  --help

Error: /usr/bin/implantisomd5 Not Found!

Please install isomd5sum and try again.

[[email protected] /app]#yum install isomd5sum

查看使用帮助,缺少依赖包安装包

[[email protected] /app]#./mkdvdiso.sh  --help

Usage: mkdvdiso.sh source /destination/DVD.iso

The ‘source‘ can be either a directory containing a single

set of isos, or an exploded tree like an ftp site.

看到使用帮助,将DVD1和DVD2添加到一个目录里,然后运行脚本合成一个iso

[[email protected] /app]#cp -r /misc/cd /app/iso

-r复制所有包括隐藏文件

[[email protected] ~]#./mkdvdiso.sh /app/iso /root/centos6.every.iso

合成一个文件,合成everything成功

挂载U盘

U盘挂载需要文件系统是fat格式linux系统才能识别,由于我的是ntfs格式不识别。

[[email protected] /app]#tail /var/log/messages -n 30

查看U盘挂载时的日志

[[email protected] /app]#cp /etc/fstab /mnt/usb

[[email protected] /app]#sync

[[email protected] /app]#sync

[[email protected] /app]#sync

将磁盘的数据写入U盘时,不要迅速拔U盘,这样数据可能在缓冲区没有写进入导致数据丢失,使用sync同步一下数据,sync强迫它将缓冲区的数据写入到磁盘。

[[email protected] /app]#umount /mnt/usb

取消挂载,再拔U盘

[[email protected] /app]#free

total       used       free        shared      buffers     cached

Mem:           1004112     937192      66920       3232      13580     628148

-/+ buffers/cache:             295464     708648

Swap:            4201624          0    4201624

其中真正使用的used=used-buffers-cached=295464

真正可使用的free=free+buffers+cached=708648

[[email protected] /app]#df  -P

Filesystem     1024-blocks    Used Available Capacity Mounted on

/dev/sda2         50264772 5103980  42600792      11% /

tmpfs               502056      76    501980       1% /dev/shm

/dev/sda3         20027260 7482280  11520980      40% /app

/dev/sda1           999320   34924    911968       4% /boot

/app/partfile      2683040    4104   2539316       1% /mnt/part

/dev/sr0           3878870 3878870         0     100% /media/CentOS_6.9_Final

-P显示较为整齐的格式

[[email protected] /app]#du --max-dept=1 /app

4       /app/amingshell

20      /app/scripts

4644784 /app/iso

4       /app/sdb2

16      /app/lost+found

4644856 /app

原文地址:https://www.cnblogs.com/sunan/p/8414037.html

时间: 2024-11-10 01:23:44

第十三章、磁盘文件管理的相关文章

第十三章——表和索引分区(1)——使用Range Left进行表分区

原文:第十三章--表和索引分区(1)--使用Range Left进行表分区 前言: 如果数据表的数据持续增长,并且表中的数据量已经达到数十亿甚至更多,数据的查询和操作将非常困难,面对非常庞大的表,几时简单的增删改操作都会花费非常多的时间,如删除某个数据然后重建索引这些操作,会很难实现.在这种情况下,管理和维护查询性能就成为了一种挑战. 在过去的日子,也就是2005之前,你可能需要使用分区视图来处理大数据量的数据,从2005开始,微软引入了叫做表分区的新特性.允许水平分割数据成为多个分区.并且也允

第十三章、大规模数据库架构

第十三章.大规模数据库架构 内容提要: 1.了解分布式数据库技术 2.了解并行数据库技术 3.了解云数据库技术 4.了解XML数据库技术 第一节 分布式数据库 1.1.分布式数据库系统概述 分布式数据库系统与分布式数据库的区别: 分布式数据库系统--数据分布存储于若干场地,并且每个场地由独立于其它场地的DBMS进行数据管理.物理上分散.逻辑上集中的数据库系统. 分布式数据库--分布式数据库系统中各场地上数据库的逻辑集合. 1.2.分布式数据库目标与数据分布策略 分布式数据库目标: 12个目标:

javascript高级程序设计 第十三章--事件

javascript高级程序设计 第十三章--事件js与HTML的交互就是通过事件实现的,事件就是文档或浏览器窗口中发生的一些特定的交互瞬间. 事件流:事件流描述的是从页面中接收事件的顺序,IE的是事件冒泡流,Netscape的是事件捕获流,这个两个是完全相反的事件流概念. 事件冒泡:由最具体的元素接收,然后逐级向上传播到更高级的节点,即事件沿DOM树向上传播,直到document对象. 事件捕获:不大具体的节点应该更早接收到事件,相当于沿DOM节点树向下级传播直到事件的实际目标,在浏览器中,是

c++第十三章 -(副本构造器)

逐位复制(bitwise copy):编译器将生成必要的代码把“源”对象各属性的值分别赋值给“目标”对象的对应成员的行为.对对象的地址赋值操作,于是乎,当删除一个对象时,它包含的指针也将被删除,但万一此时另一个副本(对象)还在引用这个指针,就会出问题! 要是程序员在当初进行对象“复制”时能够精确地表明应该复制些什么和如何赋值,那就理想了.为解决该问题,我们可以对=操作符进行重载,其中对指针进行处理:MyClass &operator= (const MyClass &rhs);该语句的意思

java-第十三章-类的无参方法(一)-查找客户姓名

package 上机练习; public class A02class { String names[] = new String[30]; public void showA(String name) { for (int i = 0; i < names.length; i++) { if (names[i] == null) { names[i] = name; break; } } } public void showB() { System.out.println("\t客户列表

java-第十三章-类的无参方法(一)-实现图形生成器

package 上机练习; public class A03class { public String showA(int rows, String ch) { for (int i = 0; i < rows; i++) { for (int j = 0; j <= i; j++) { System.out.print(ch); } System.out.println(); } return ch; } } package 上机练习; import java.util.Scanner; p

java-第十三章-类的无参方法(一)-模拟账户查询,实现存取款

package 上机练习; import java.util.Scanner; public class A04class { double Money = 0; public double showA() { return Money; } public void showB(double money) { Money += money; System.out.println("当前余额:" + Money); } public void showC(double money2) {

java-第十三章-类的无参方法(一)-代参方法的编程计算器

package 本章总结; public class A01class { public int ope(int Operator, int num1, int num2) { switch (Operator) { case 1: num1 += num2; break; case 2: num1 -= num2; break; case 3: num1 *= num2; break; case 4: num1 /= num2; break; default: System.out.print

java-第十三章-类的无参方法(一)-模拟一个简单的购房商贷月供计算器

package 本章总结; public class A02class { double Money = 0; public double showA(double money, int choice) { switch (choice) { case 1: Money = (money + money * 0.0603) / 36; break; case 2: Money = (money + money * 0.0612) / 60; break; case 3: Money = (mon