磁盘存储和文件系统
cat /sys/block/sda/queue/rotational
1是机械硬盘
0是固态硬盘
hexdump
进制查看器
-n length只格式化输入文件的前length 个字节
-C 输出规范的十六进制和ASCII码
hexdump -C -n 512 /dev/sda 从硬盘上只读前512个字节 从80 20 到1f 06是分区表
000001b0 00 00 00 00 00 00 00 00 17 8f 02 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 00 80 0c 00 fe |)....... .......|
000001e0 ff ff 83 fe ff ff 00 08 a0 0c 00 00 40 06 00 fe |............@...|
000001f0 ff ff 05 fe ff ff 00 08 e0 12 00 f8 1f 06 55 aa |..............U.|
00000200
lsblk
列出所有可用块的信息
-a 显示所有设备
-b, –bytes 以bytes方式显示设备大小。
dd
命令用于读取、转换并输出数据。
if=文件名:输入文件名,缺省为标准输入。即指定源文件。
of=文件名:输出文件名,缺省为标准输出。即指定目的文件。
skip=blocks:从输入文件开头跳过blocks个块后再开始复制。
seek=blocks:从输出文件开头跳过blocks个块后再开始复制。
count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。
bs=bytes:同时设置读入/输出的块大小为bytes个字节。
例子:dd if=/dev/sda of=/data/dpt bs=1 count=64 skip=446
把sda的数据取出来生成dpt的文件1个字节1个字节的取,一共取64个,跳过446个。
dd if=/dev/zero of=/dev/sda bs=1 count=2 seek=510
破坏sda文件后两个
dd if=/data/dpt of=/dev/sda bs=1 count=2 skip=64 seek=510
还原
切记:如果备份的话不要放在本机,否则打不开数据就丢失了。
uuidgen
生成uuid的不会重复
parted 的操作都是实时生效的,小心使用
用法:parted [选项]... [设备 [命令 [参数]...]...]
parted /dev/sdb mklabel gpt|msdos
parted /dev/sdb print
parted /dev/sdb mkpart primary 1 200 (默认M)
parted /dev/sdb rm 1
parted –l 列出分区信息
fdisk
查看分区信息
-b<分区大小>:指定每个分区的大小; fdisk -b
-l:列出指定的外围设备的分区表状况; fdisk -l /dev/sda
-s<分区编号>:将指定的分区大小输出到标准输出上,单位为区块; fdisk -s /dev/sda
-v:显示版本信息。 fdisk -v
fdisk /dev/sdb 管理分区
子命令:
p 分区列表
t 更改分区类型
n 创建新分区
d 删除分区
v 校验分区
u 转换单位
w 保存并退出
q 不保存并退出
查看内核是否已经识别新的分区
cat /proc/partations 也可以用df -h
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] 通知内核读取分区表
fdisk w保存之后一定要看一下有没有warning 报错centos6 执行
partx -d --nr 6 /dev/sda
centos7 出现warning 执行partprobe 就可以了
查看支持的操作系统
ls /lib/modules/3.10.0-957.el7.x86_64/kernel/fs/
查看支持的文件系统
cat /proc/filesystems
mkfs命令:
(1) mkfs.FS_TYPE /dev/DEVICE
ext4
xfs
btrfs
vfat
(2) mkfs -t FS_TYPE /dev/DEVICE
-L 'LABEL' 设定卷标
mkfs.xfs -L /sdb3目录 /dev/sdb3
mount /dev/sdb3 /sdb3
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
-i # 为数据空间中每多少个字节创建一个inode;不应该小于block大小
-N # 指定分区中创建多少个inode
-I 一个inode记录占用的磁盘空间大小,128---4096
-m # 默认5%,为管理人员预留空间占总空间的百分比
-O FEATURE[,...] 启用指定特性
-O ^FEATURE 关闭指定特性
xfs_info /dev/sdb1
可以查看xfs分区的信息 sdb1是目录
blkid
:块设备属性信息查看
blkid /devsda1
blkid [OPTION]... [DEVICE]
-U UUID 根据指定的UUID来查找对应的设备
-L LABEL 根据指定的LABEL来查找对应的设备
当我们修改 /etc/fstab 时候可以 用 r!/dev/sda1直接输入到编辑器里面。
e2label:管理ext系列文件系统的LABEL
e2label DEVICE [LABEL]
findfs :查找分区
findfs [options] LABEL=
findfs [options] UUID=
tune2fs
tune2fs:重新设定ext系列文件系统可调整参数的值
-l 查看指定文件系统超级块信息;super block
-L 'LABEL’ 修改卷标
-m # 修预留给管理员的空间百分比
-j 将ext2升级为ext3
-O 文件系统属性启用或禁用, –O ^has_journal
-o 调整文件系统的默认挂载选项,–o ^acl
-U UUID 修改UUID号
dumpe2fs:
将磁盘块分组管理
-h:查看超级块信息,不显示分组信息
fsck
: File System Check
fsck.FS_TYPE
fsck -t FS_TYPE
注意:FS_TYPE 一定要与分区上已经文件类型相同
-a 自动修复
-r 交互式修复错误
先取消挂载再进行修复
umount /data
fsck -y /dev/sda
e2fsck
:ext系列文件专用的检测修复工具
-y 自动回答为yes
-f 强制修复
-p 自动进行安全的修复文件系统问题
检测并修复/dev/hda5?:e2fsck -p /dev/hda5
xfs_repair
:xfs文件系统专用检测修复工具
-f 修复文件,而设备
-n 只检查
-d 允许修复只读的挂载设备,在单用户下修复 / 时使用,然后立即reboot
修复的时候一定要先取消挂载 umount /sdb3目录 再执行 xfs_repair /sdb3目录
mount
挂载
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:挂载点
事先存在,建议使用空目录
进程正在使用中的设备无法被卸载
mount常用命令选项
-t vsftype 指定要挂载的设备上的文件系统类型
-r readonly,只读挂载
-w read and write, 读写挂载
-n 不更新/etc/mtab,mount不可见
-a 自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件
中,且挂载选项中有auto功能),检查语法是否出错。
-L 'LABEL' 以卷标指定挂载设备
-U 'UUID' 以UUID指定要挂载的设备
-B, --bind 绑定目录到另一个目录上
查看内核追踪到的已挂载的所有设备
mount -L 卷表名 目录
mount -U UUID 目录
cat /proc/mounts
mount常用命令选项
-o options:(挂载文件系统的选项),多个选项使用逗号分隔
async 异步模式 sync 同步模式,内存更改时,同时写磁盘
atime/noatime 包含目录和文件
diratime/nodiratime 目录的访问时间戳
auto/noauto 是否支持自动挂载,是否支持-a选项
exec/noexec 是否支持将文件系统上运行应用程序
dev/nodev 是否支持在此文件系统上使用设备文件
suid/nosuid 是否支持suid和sgid权限
remount 重新挂载
mount -o remount,acl /mnt/sdb
ro 只读 rw 读写
user/nouser 是否允许普通用户挂载此设备,/etc/fstab使用
acl 启用此文件系统上的acl功能 mount -o remount,acl /mnt/sdb
mount -o remount,rw /mnt/sdb
loop 使用loop设备
defaults:相当于rw, suid, dev, exec, auto, nouser, async
findmnt MOUNT_POINT|device
查看正在访问指定文件系统的进程
lsof MOUNT_POINT
fuser -v MOUNT_POINT
终止所有在正访问指定的文件系统的进程
fuser -km MOUNT_POINT
卸载
umount DEVICE
umount MOUNT_POINT
cat /etc/mtab文件显示当前已挂载的所有设备
最后写入到这个文件夹长久有效
cat /etc/fstab
mount -a 可以检查写的语法是否出错
gdisk 可以支持2T
这是GPT分区比MBR分区的主要优势。分区时,
gdiks命令使用方法同fdisk命令
简单分区
Linux的硬盘识别:
一般使用”fdisk -l”命令可以列出系统中当前连接的硬盘
设备和分区信息.新硬盘没有分区信息,则只显示硬盘大小信息.
1.关闭服务器加上新硬盘
2.启动服务器,以root用户登录
3.查看硬盘信息
#fdisk -l
[cpp] view plain copy
1. Disk /dev/sda: 42.9 GB, 42949672960 bytes
2. 255 heads, 63 sectors/track, 5221 cylinders
3. Units = cylinders of 16065 * 512 = 8225280 bytes
4. Sector size (logical/physical): 512 bytes / 512 bytes
5. I/O size (minimum/optimal): 512 bytes / 512 bytes
6. Disk identifier: 0x0004406e
7. Device Boot Start End Blocks Id System
8. /dev/sda1 * 1 39 307200 83 Linux
9. Partition 1 does not end on cylinder boundary.
10. /dev/sda2 39 2589 20480000 83 Linux
11. /dev/sda3 2589 2850 2097152 82 Linux swap / Solaris
12. /dev/sda4 2850 5222 19057664 5 Extended
13. /dev/sda5 2850 5222 19056640 83 Linux
14.
15. Disk /dev/sdb: 10.7 GB, 10737418240 bytes
16. 255 heads, 63 sectors/track, 1305 cylinders
17. Units = cylinders of 16065 * 512 = 8225280 bytes
18. Sector size (logical/physical): 512 bytes / 512 bytes
19. I/O size (minimum/optimal): 512 bytes / 512 bytes
20. Disk identifier: 0x14b52796
21. Device Boot Start End Blocks Id System
4.创建新硬盘分区命令参数:
5.进入磁盘,对磁盘进行分区,注意红色部分。
#fdisk /dev/sdb
[cpp] view plain copy
1. Command (m for help):n
2. Command action
3. e extended //输入e为创建扩展分区
4. p primary partition (1-4) //输入p为创建逻辑分区
5. p
6. Partion number(1-4):1 //在这里输入l,就进入划分逻辑分区阶段了;
7. First cylinder (51-125, default 51): //注:这个就是分区的Start 值;这里最好直接按回车,如果您输入了一个非默认的数字,会造成空间浪费;
8. Using default value 51
9. Last cylinder or +size or +sizeM or +sizeK (51-125, default 125): +200M 注:这个是定义分区大小的,+200M 就是大小为200M ;当然您也可以根据p提示的单位cylinder的大小来算,然后来指定 End的数值。回头看看是怎么算的;还是用+200M这个办法来添加,这样能直观一点。如果您想添加一个10G左右大小的分区,请输入 +10000M ;
10.
11. Command (m for help): w //最后输入w回车保存。
查看一下:
#fdisk -l
可以看到/dev/sdb1分区,我就省略截图咯。
6.格式化分区:
#mkfs -t ext4 /dev/sdb1 //注:将/dev/sdb1格式化为ext4类型
[cpp] view plain copy
1. mke2fs 1.41.12 (17-May-2010)
2. 文件系统标签=
3. 操作系统:Linux
4. 块大小=4096 (log=2)
5. 分块大小=4096 (log=2)
6. Stride=0 blocks, Stripe width=0 blocks
7. 640848 inodes, 2562359 blocks
8. 128117 blocks (5.00%) reserved for the super user
9. 第一个数据块=0
10. Maximum filesystem blocks=2625634304
11. 79 block groups
12. 32768 blocks per group, 32768 fragments per group
13. 8112 inodes per group
14. Superblock backups stored on blocks:
15. 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
16.
17. 正在写入inode表: 完成
18. Creating journal (32768 blocks): 完成
19. Writing superblocks and filesystem accounting information: 完成
20.
21. This filesystem will be automatically checked every 35 mounts or
22. 180 days, whichever comes first. Use tune2fs -c or -i to override.
这样就格式化好了,我们就可以用mount 加载这个分区,然后使用这个文件系统;
7.创建/data目录:
#mkdir /data
8.开始挂载分区:
#mount /dev/sdb1 /data
9.查看硬盘大小以及挂载分区:
#df -h
10.配置开机自动挂载
因为mount挂载在重启服务器后会失效,所以需要将分区信息写到/etc/fstab文件中让它永久挂载:
#vi /etc/fstab
0, 0 表示开机不检查磁盘。
如果挂载磁盘分区不生效,可以查看磁盘的UUID
ls -l /dev/disk/by-uuid/
blkid /dev/sdb1
#vi /etc/fstab
0, 0 表示开机不检查磁盘。
11.重启系统
Linux的硬盘识别:
一般使用”fdisk -l”命令可以列出系统中当前连接的硬盘
设备和分区信息.新硬盘没有分区信息,则只显示硬盘大小信息.
1.关闭服务器加上新硬盘
2.启动服务器,以root用户登录
3.查看硬盘信息
#fdisk -l
[cpp] view plain copy
1. Disk /dev/sda: 42.9 GB, 42949672960 bytes
2. 255 heads, 63 sectors/track, 5221 cylinders
3. Units = cylinders of 16065 * 512 = 8225280 bytes
4. Sector size (logical/physical): 512 bytes / 512 bytes
5. I/O size (minimum/optimal): 512 bytes / 512 bytes
6. Disk identifier: 0x0004406e
7. Device Boot Start End Blocks Id System
8. /dev/sda1 * 1 39 307200 83 Linux
9. Partition 1 does not end on cylinder boundary.
10. /dev/sda2 39 2589 20480000 83 Linux
11. /dev/sda3 2589 2850 2097152 82 Linux swap / Solaris
12. /dev/sda4 2850 5222 19057664 5 Extended
13. /dev/sda5 2850 5222 19056640 83 Linux
14.
15. Disk /dev/sdb: 10.7 GB, 10737418240 bytes
16. 255 heads, 63 sectors/track, 1305 cylinders
17. Units = cylinders of 16065 * 512 = 8225280 bytes
18. Sector size (logical/physical): 512 bytes / 512 bytes
19. I/O size (minimum/optimal): 512 bytes / 512 bytes
20. Disk identifier: 0x14b52796
21. Device Boot Start End Blocks Id System
4.创建新硬盘分区命令参数:
fdisk可以用m命令来看fdisk命令的内部命令;
a:命令指定启动分区;
d:命令删除一个存在的分区;
l:命令显示分区ID号的列表;
m:查看fdisk命令帮助;
n:命令创建一个新分区;
p:命令显示分区列表;
t:命令修改分区的类型ID号;
w:命令是将对分区表的修改存盘让它发生作用。
5.进入磁盘,对磁盘进行分区,注意红色部分。
#fdisk /dev/sdb
[cpp] view plain copy
1. Command (m for help):n
2. Command action
3. e extended //输入e为创建扩展分区
4. p primary partition (1-4) //输入p为创建逻辑分区
5. p
6. Partion number(1-4):1 //在这里输入l,就进入划分逻辑分区阶段了;
7. First cylinder (51-125, default 51): //注:这个就是分区的Start 值;这里最好直接按回车,如果您输入了一个非默认的数字,会造成空间浪费;
8. Using default value 51
9. Last cylinder or +size or +sizeM or +sizeK (51-125, default 125): +200M 注:这个是定义分区大小的,+200M 就是大小为200M ;当然您也可以根据p提示的单位cylinder的大小来算,然后来指定 End的数值。回头看看是怎么算的;还是用+200M这个办法来添加,这样能直观一点。如果您想添加一个10G左右大小的分区,请输入 +10000M ;
10.
11. Command (m for help): w //最后输入w回车保存。
查看一下:
#fdisk -l
可以看到/dev/sdb1分区,我就省略截图咯。
6.格式化分区:
#mkfs -t ext4 /dev/sdb1 //注:将/dev/sdb1格式化为ext4类型
[cpp] view plain copy
1. mke2fs 1.41.12 (17-May-2010)
2. 文件系统标签=
3. 操作系统:Linux
4. 块大小=4096 (log=2)
5. 分块大小=4096 (log=2)
6. Stride=0 blocks, Stripe width=0 blocks
7. 640848 inodes, 2562359 blocks
8. 128117 blocks (5.00%) reserved for the super user
9. 第一个数据块=0
10. Maximum filesystem blocks=2625634304
11. 79 block groups
12. 32768 blocks per group, 32768 fragments per group
13. 8112 inodes per group
14. Superblock backups stored on blocks:
15. 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
16.
17. 正在写入inode表: 完成
18. Creating journal (32768 blocks): 完成
19. Writing superblocks and filesystem accounting information: 完成
20.
21. This filesystem will be automatically checked every 35 mounts or
22. 180 days, whichever comes first. Use tune2fs -c or -i to override.
这样就格式化好了,我们就可以用mount 加载这个分区,然后使用这个文件系统;
7.创建/data目录:
#mkdir /data
8.开始挂载分区:
#mount /dev/sdb1 /data
9.查看硬盘大小以及挂载分区:
#df -h
10.配置开机自动挂载
因为mount挂载在重启服务器后会失效,所以需要将分区信息写到/etc/fstab文件中让它永久挂载:
#vi /etc/fstab
加入:
/dev/sdb1(磁盘分区) /data1(挂载目录) ext4(文件格式)defaults 0 0
0, 0 表示开机不检查磁盘。
如果挂载磁盘分区不生效,可以查看磁盘的UUID
ls -l /dev/disk/by-uuid/
#vi /etc/fstab
加入:
UUID=b49df1a7-0001-4b38-af2f-0b5b8727f52d /data ext4 defaults 0 0
0, 0 表示开机不检查磁盘。
11.重启系统