两种分区方式:MBR,GPT
MBR: Master Boot Record,1982年,使用32位表示扇区数,分区不超过2T 32位 差不多2T 2的32次方除以二
如何分区:按柱面
0磁道0扇区:512bytes
446bytes: boot loader 关于计算机启动的一些内容 主引导程序
64bytes:主分区表
16bytes: 标识一个分区
2bytes: 55AA 分区的存在,55aa 16进制数
4个主分区;3主分区+1扩展(N个逻辑分区)
echo '- - -' >/sys/class/scsi_host/host2/scan 刷新新插入的硬盘硬盘
EBR(512字节) 是扩展分区最前面得一点空白区域,每个逻辑分区前面都有
MBR (512字节) 是主分区最前面的一点空白区域
fdisk -l /dev/sda 查看磁盘上的真正的分区表
lsblk 查看内存中的分区表
parted /dev/sdb mkpart primay 1 1000 mkpart是创建分区的意思
parted /dev/sda print 查看 分区
parted /dev/sda rm 1 删除分区 慎用
gdisk /dev/sdb 类fdisk 的GPT分区工具 比parted好用
fdisk -l [-u] [device...] 查看分区
fdisk /dev/sdb 管理分区
子命令:
p 分区列表
t 更改分区类型
n 创建新分区
d 删除分区
v 校验分区
u 转换单位
w 保存并退出
q 不保存并退出
partx -a /dev/sda 更新分区,新创建分区的时候更新分区的命令 ,这个命令只有在centos6上面好使
partx -d --nr 6-7 /dev/sda 更新分区,删除后磁盘用的更新 6-7 代表两个新创建的分区
partprobe 在centos5和7上面 同步磁盘。
tune2fs -l /dev/sdb3 增加日志功能 增加特性
mount 加分区名字 需要挂在的名字 挂载
在挂载之前要先确定这个挂载点是否是一个目录
umount 取消挂载
一个扇区是512字节 一圈是6位2的6次方,也就是64个扇区
有10个位的圈
dd if=/dev/zero of=/dev/sda bs=1 count=64 skip=446 seek=446 删除其中的64个字节,跳过后面的446个字节
查看磁盘分区有四种方式
1. ls /dev/sd* 看设备名
2. cat /proc/partitions 看内存
3. lsblk 看内存
4. fdisk /dev/sda -l 看磁盘
fdisk 创建MBR分区
gdisk 创建GPT分区
parted 高级分区操作
partprobe-重新设置内存中的内核分区表版本
dd if=/dev/zero of=/dev/sdb bs=1 count=512 创建磁盘
parted /dev/sdb mklabel gpt 更改成 GPT 格式
parted /dev/sdb print
fdisk /dev/sdb print -l 查看磁盘
parted /dev/sdb mklabel msdos 这个是把磁盘全删了,不存在转换问题mklabel msdos
mke2fs /dev/sdb3 意思就是把sdb3的分区格式改成文件系统ext2的格式 也可以这么写mkfs.ext2 或者mkfs -t ext2
上面的命令如果加上 -j 就多了个日志功能也就从ext2 变成了ext3 文件系统了
tune2fs -o ^has_journal /dev/sdb5 是去除日志功能
cat /etc/mtab 可以查看已经挂载的文件
cat /proc/mounts 这个查看挂载点更全面一些
findmut /文件目录可查看是不是挂载点
blkid 检查分区是否更改正确
挂载方法: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':例如
mount -U "0c50523c-43f1-45e7-85c0-a126711d406e" /mnt/sdb2 这是通过UUID来挂载分区路径
(4) 伪文件系统名称:proc, sysfs, devtmpfs, configfs
dir:挂载点
事先存在;建议使用空目录
进程正在使用中的设备无法被卸载
fuser -v 加上挂载名字可以查看当前目录是哪个用户在访问。
fuser -km 加上挂载名字可以直接强行的踢走目前正在访问的用户
w 可查看正在登陆的用户的ID端口 ,用 echo Please get out > /dev加上那个用户登录的TTY可以向那个用户发出信息
findmnt /app/ 这个命令可查看目录是不是挂载点
-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:包含目录和文件
diratime/nodiratime:目录的访问时间戳
auto/noauto:是否支持自动挂载,是否支持-a选项
exec/noexec:是否支持将文件系统上运行应用程序
dev/nodev:是否支持在此文件系统上使用设备文件
suid/nosuid:是否支持suid和sgid权限
remount:重新挂载 用 mount -o remount,跟上ro或者是rw 加上文件或者目录,就可以不用取消挂载给文件设置权限,万一有用户在访问这个文件的时候不方便。
ro:只读
rw:读写
user/nouser:是否允许普通用户挂载此设备,/etc/fstab使用
acl:启用此文件系统上的acl功能 如果分区块上这个acl权限没有启用 setfacl -m u:lixiaozi:w lost+found/ 一些加权限的命令都无法使用。 tune2fs -o acl /dev/sdb2 这个命令是给sdb2 增加上了acl权限 tune2fs -l /dev/sdb2 查看有没有加上acl权限
tune2fs -o ^acl /dev/sdb2 取消acl权限命令
loop: 使用loop设备 在centos6 上面用到 -o loop 在centos7上面用不到
使用文件做分区:[root@centos69 app]#dd if=/dev/zero of=partfile bs=1G count=1
[root@centos69 app]#dd if=/dev/zero of=partfile bs=1M count=1024
上面这两条命令都是可以的但是用1M创建文件创建的速度快点
mkfs.ext4 partfile 给这个文件设置一个文件系统。
blkid partfile 查看文件系统
mkdir /mnt/part 创建需要挂载的目录
mount /app/partfile /mnt/part 挂载会提示要加 -o loop 命令。
mount /app/partfile /mnt/part -o loop 就可以挂载了
uuidgen 加分区可更改分区uuid
tune2fs -U 加上UUID号 输入分区名 可更改分区UUID
1 创建分区
fdisk t 82
2 文件系统
mkswap /dev/sdd1 -L SWAP_SDD1
3 配置文件
vim /etc/fstab
UUID=2979b3c4-c0c5-44b1-bf21-a213f90d80a0 swap swap pri=10 0 0
4 生效
swapon -a 更新在fstab 里面加的特殊命令
mount -a 更新在fstab 里面加的普通命令
swapon -s 查看
5 删除 swap
1)swapoff /dev/sdd1 先禁用swap
2)vim /etc/fstab 修改fstab文件
最后去fdisk 里去删除磁盘 fdisk /dev/sdd 删除分区
eject 弹出磁盘
eject -t 弹入磁盘
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 不截短输出文件
cp /etc/fstab /mnt/usb 把U盘中的文件复制到虚拟中去的时候,显示成功了但是很有可能还没有复制完成,只是这些东西还在缓存内存中。这时候用sync命令输入三遍在拔出U盘...sync 是强迫吧缓存中的数据写入磁盘.
sync 把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐
实验:迁移/Home到新独立分区
1 建立新分区
2 建立文件系统
3 mkdir /mnt/home
mount /dev/sda6 /mnt/home
4 cp /home/* /mnt/home -av
5 tar cvf /app/home.tar /home
scp remote
6 init 1 断开网络,在远程不要执行
7 rm -rf /home/*
8 vim /etc/fstab
UUID=b0421d9a-8072-4be5-9526-070535ac0a8e /home ext4 defaults 0 0
9 mount -a
umount /mnt/home
10 init 5 还到原有模式
备份:
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
将内存里的数据拷贝到root目录下的mem.bin文件
从光盘拷贝iso镜像
dd if=/dev/cdrom of=/root/cd.iso
拷贝光盘数据到root文件夹下,并保存为cd.iso文件
销毁磁盘数据
dd if=/dev/urandom of=/dev/sda1
利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据
,执行此操作以后,/dev/sda1将无法挂载,创建和拷贝操作
无法执行
测试硬盘写速度
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错误。当这种情况影响到硬盘的第一个扇区时,
可能导致硬盘报废。上边的命令有可能使这些数据起死回
生,且这个过程是安全高效的
实验:实现配额
1 启用配额功能
vim /etc/fstab
UUID=b0421d9a-8072-4be5-9526-070535ac0a8e /home ext4 usrquota,grpquota 0 0
2 创建配额数据库
quotacheck -cug
3 启用数据库
quotaon /home
4 指用户的空间限制
edquota wang
Disk quotas for user wang (uid 500):
Filesystem blocks soft hard inodes soft hard
/dev/sda6 1164 800000 1000000 159 162 165
5 测试
/dev/md0 ext4 /mnt/raid
1G chunk 512K
实验:创建LV
pvcreate /dev/sd{a5,b1}
vgcreate vg0 /dev/sd{a5,b1}
lvcreate -n lv0 -L 10G vg0
mkfs.ext4 /dev/vg0/lv0
mount
实验:扩展LV
lvextend -l +100%FREE /dev/vg0/lv0
resize2fs /dev/vg0/lv0 extN
xfs_growfs /mnt/lv0 xfs
或者
lvextend -r -l +100%free /dev/vg0/lv0
实验:缩减LV
umount /mnt/lv0
fsck -f /dev/vg0/lv0
resize2fs /dev/vg0/lv0 8G
lvreduce -L 8G /dev/vg0/lv0
mount -a
实验:删除PV
vgdisplay 看可用空间,大于pv的空间
pvmove /dev/sdc
vgreduce vg0 /dev/sdc
pvremove /dev/sdc
实验:迁移LV到新主机
1 确认VG名和目标主机不同
vgrename vg1 vg100
lvrename lv2 lv100
vgdisplay
pvs
2 umount /mnt/lv2
vgchange -an /dev/vg100/lv100
vgexport vg100
3 拆除,在新主机接入
4
lvs;vgs
vgimport vg100
vgchange -ay vg100
mount /dev/vg100/lv100 /mnt
快照里面是空的,只是在快照之后有什么文件被修改后,原来没有被修改的文件会自动的存入快照中。这样就可以恢复快照,而且比备份省空间
做快照:需要逻辑卷
lvcreate -n lv0-snapshot -L 1G -s -p r /dev/vg0/lv0 lv0-snapshot 给这个文件做快照的名字 L是快照大小的意思 s是快照的意思 -p r 是权限 /dev/vg0/lv0 给哪个文件做快照
修改快照:
mkdir /mnt/snap mount /dev/vg0/lv0 /mnt/snap 挂载
取消原来所有的挂载才能还原快照。
lvconvert --merge /dev/vg0/lv0-snapshot 还原原来的系统,还原原来的所有状态。
lvremove /dev/vg0/lv0-snapshot 删除快照,删除之前要先取消所有挂载。
RAID 如果原来磁盘坏了,更改磁盘之后要同步这个RAID resize2fs /dev/md0 这个命令只能应用于ext系列。
xfs系列要用 xfs_growfs /dev/md0