磁盘管理

Linux思想一切皆文件:

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

I/O 设备地址

设备类型:

块设备:block,存取单位“块”,磁盘 (随机访问)

字符设备:char,存取单位“字符”,键盘 (逻辑访问)

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

设备编号:

ll /dev/sda*

root disk 8.0

root disk 8.1

每一个设备都拥有一个主要号码,代表设备的类型,第二个是同一类型的唯一编号。

硬盘接口类型:

并行:

IDE:133MB/s (家用)

SCSI:640MB/s  (服务器)

串口:

SATA:6Gbps (家用)

SAS:6Gbps   (服务器)

USB:480MB/s

rpm: rotations per minute

每分钟的转速

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

IDE: /dev/hd

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

不同设备:a-z

/dev/sda, /dev/sdb, …

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

/dev/sda1, /dev/sda5

磁头 head

2磁头数 =1盘片

磁道 track

扇区 sector (512字节)

head 256 磁头

track 1024 磁道

secror 63 扇区

CHS(culinder柱面)

culinder=track*head=512*63*256=8M

(centos6版本之后就不用整个柱面分区)

LBA 逻辑寻址(6版本之后就使用)

分区

两种分区方式: MBR ,GPT

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

如何分区:按柱面

0磁道0扇区:512bytes

446bytes:boot loader

64bytes:分区表

16bytes: 标识一个分区

2bytes: 55AA (识别是否有分区)

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

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

使用128位UUID 表示磁盘和分区GPT分区表自动备份在头和尾两份,并有CRC校验位

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

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

linux 使用的分区方式

lilo

grub (5,6版本)

grub2(7版本之后使用)

echo "- – -"> /sys/class/scsi_host/host0/scan

扫描新添加的硬盘

(查看分区)

lsblk 查看硬盘信息 (读取内存中的信息)

fdisk -l /dev/sdd 查看硬盘信息

hexdump -C -n 512 /dev/sda 查看磁盘前512字节的信息

dd if=/dev/sda of=/testdir/mbrbak bs=1 count=512

备份mbr

dd if=/testdir/mbrbak of=/dev/sdd

将磁盘中备份的磁盘信息放到sdd

dd if=/dev/zero of=/dev/sdd bs=1 count=446 将前446字节用0替代

dd if=/dev/zero of/=dev/sdd bs=1 count=2 skip=510 seek=510

用0代替最后两个字节的分区标识55AA。

最后两位字节存储标识的55 AA变成00 00

dd if=/testdir/mbrbak of=/dev/sdd bs=1 count=2 skip=510 seek=510

恢复分区标识

管理分区

列出块设备

lsblk

创建分区使用:

fdisk创建MBR分区,也支持GPT,对于一块硬盘,最多只能管理15分区

fdisk /dev/sdc

w:存盘退出

n:添加一个新的分区、柱面为单位,

p:显示

d:删除

q:不保存退出

t:更改分区类型

gdisk创建GPT分区

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

cat /proc/partations

partx -a /dev/sda (6使用这个指令)

partprobe

同步

GNU parted高级分区操作(创建、复制、调整大小等等)

parted /dev/sdc mklabel msdos

创建新的磁盘格式为MBR

parted /dev/sdc mklabel gpt

创建新的磁盘格式为GPT

fdisk -l /dev/sdc

查看分区的起始到结束点,块的数量,ID

parted /dev/sdc/mkpart primary 1 1024起始点 终止点      创建一个分区

parted /dev/sdc/ rm 1

删除/dev/sdc 第一个分区

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

文件系统

文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;

即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统。

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

ext3(centos5)

ext4(centos6)

xfs(centos7)

光盘:iso9660

网络文件系统:NFS,CIFS (Linux包 samba)

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

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

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

文件系统分类

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

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

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

文件系统的组成部分:

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

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

Linux的虚拟文件系统:VFS

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

lsmod 可以查看设备的驱动是否安装成功

创建文件系统

mkfs.

mkfs -t ext4

mke2fs

mke2fs /dev/sdc1 建立ext文件系统

一个块=4k

tune2fs -l /dev/sd*

超级块是存储关于块的数据,块的大小,块的元数据。

组超级块,存储块的大小,和每个组有多少块,块的元数据。

超级块会自动备份。

blkid 查看盘的文件系统

tun2fs -o ^has_journal /dev/sd*

移除 日志功能,ext3变ext2

创建ext文件系统

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

-t {ext2|ext3|ext4}

-b {1024|2048|4096}

-L ‘LABEL‘ 卷标(卷标名最好使用挂载点名字)

-j: 相当于-t ext3

mkfs.ext3 = mkfs-t ext3 = mke2fs -j = mke2fs -t ext3

tune2fs -m 0 /dev/sda5

-i#: 为数据空间中每多少个字节创建一个inode;此大小不应该小于block的大小

-N#:为数据空间创建个多少个inode

-I 一个inode记录大小128—4096

-m #: 默认5%,为管理人员预留空间占总空间的百分比

-O FEATURE[,…]:启用指定特性

-O ^FEATURE:关闭指定特性

文件系统标签

blkid:块设备属性信息查看

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

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

e2label /dev/sdc2 /mnt/sdc2

加卷标

tune2fs

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

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

-L ‘LABEL‘:修改卷标

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

-j: 将ext2升级为ext3

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

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

-U UUID: 修改UUID号

ecntos6 手动分区格式化ext 没有acl功能

tune2fs -o acl /dev/sd*

ACL:

具有能再添加局限权限的能力,实现灵活的权限管理

Centos 7 默认创建xfs 和ext4 文件系统有ACL功能。

Centos 7 版本之前,默认手工创建的ext4文件系统无ACL功能。

手动添加:

tune2fs -o acl /dve/sdb1

mount -o acl /dve/sbd1 /mnt

ACL 生效顺序:所有者,自定义用户,自定义组,其他人。

tune2fs -l /dev/sd*

文件系统检测和修复

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

挂载为文件系统标记为“dirty”

fsck: File System Check

fsck.FS_TYPE

fsck-t FS_TYPE

-a: 自动修复错误

-r: 交互式修复错误

fsck -y /dev/sd* 默认在yes的选项下修复

不要在挂载的情况下修复,不然修复会破坏元数据。

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

fsck -a /dev/sd*

文件修复

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

-y:自动回答为yes

-f:强制修复

最大挂载次数和时间间隔会触发fsck检查命令。

fuser -v /mnt/sdb1 查看谁在挂载使用用

fuser -km /mnt/sdb1 强行T出挂载

挂载点目录一般为空

mount 查看挂载

cat /etc/mounts(特殊项都能看到)

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

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

把设备关联挂载点:mount Point

mount

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

umount

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

挂载点目录一般为空

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

mount -o remount,noatime /mnt/

取消挂载再重新挂载,不使用atime

mount -o noexec,noatime /mnt/

取消挂载再重新挂载,不使用执行文件

不要轻易将挂载权限比普通用户

创建了一个新的文件夹/mnt/sdd

将硬盘/dev/sdd 挂载在/mnt/sdd中

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

async:异步模式

sync:同步模式,内存更改时,同时写磁盘

atime/noatime:包含目录和文件

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

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

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

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

suid/nosuid:不否支持suid和sgid权限

remount:重新挂载

ro:只读

rw:读写

user/nouser:是否允许普通用户挂载此设备,默认管理员才能挂载

acl:启用此文件系统上的acl功能

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