linux磁盘管理
命令df:
df [选项]...[FILE]...
文件-a,--all包含所有的具有0 Blocks的文件系统
文件--block-size={SIZE}大小的Blocks
文件-h,--human-readable使用人类可以的格式
文件-H,--si很像,但是用1000为单位而不是用1024
文件-i,--inodes列出inode资讯,不列出已使用block
文件-k,--kilobytes就像是--block-size=1024
文件-l,--local限制列出的文件结构
文件-m,--megabytes 就像-block-size=1048576
文件--no-sync 取得资讯前不sync (预设值)
文件-P,--portabillity 使用POSIX输出格式
文件--sync 在取得资讯前 sync
文件-t,-type=TYPE限制列出文件系统的TYPE
文件-T,--print-type显示文件系统的格式
文件-x,--exclude-type=TYPE 限制列出文件系统不要显示TYPE
文件-v(忽略)
文件-help显示这个帮手并且离开
文件--version 输出版本资讯并离开
命令df用来查看以挂载的磁盘总容量、使用容量剩余容量等等,可以不加任何参数,默认以KB为单位显示。示例命令如下:
第一列:磁盘分区的名字
第二列:磁盘的总大小,单位kb
第三列:已用多少
第四列:可用多少
第五列:已用百分比
第六列:挂载点 系统里的一个目录,linux磁盘不能直接访问,需要通过一个挂载点才能访问
[root@localhost ~]# df
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/sda3 12943360 921652 12021708 8% /
devtmpfs 924888 0 924888 0% /dev
tmpfs 934344 0 934344 0% /dev/shm
tmpfs 934344 8728 925616 1% /run
tmpfs 934344 0 934344 0% /sys/fs/cgroup
/dev/sda1 201388 105152 96236 53% /boot
tmpfs 186872 0 186872 0% /run/user/0
使用-h选项以合适的单位来显示,可读性高
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda3 13G 900M 12G 8% /
devtmpfs 904M 0 904M 0% /dev
tmpfs 913M 0 913M 0% /dev/shm
tmpfs 913M 8.6M 904M 1% /run
tmpfs 913M 0 913M 0% /sys/fs/cgroup
/dev/sda1 197M 103M 94M 53% /boot
tmpfs 183M 0 183M 0% /run/user/0
使用-i表示查看inodes的使用情况。
[root@localhost ~]# df -i |grep -v tmpfs
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/sda3 12953600 24172 12929428 1% /
/dev/sda1 204800 330 204470 1% /boot
使用-k-m分别为以kb和mb为单位显示:
[root@localhost ~]# df -k |grep -v tmpfs
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/sda3 12943360 922400 12020960 8% /
/dev/sda1 201388 105152 96236 53% /boot
[root@localhost ~]# df -m |grep -v tmpfs
文件系统 1M-块 已用 可用 已用% 挂载点
/dev/sda3 12640 901 11740 8% /
/dev/sda1 197 103 94 53% /boot
命令du:
用来查看某个目录或文件所占的空间大小,其格式为du [选项][文件名或目录名]
选项:
-a或-all 显示目录中个别文件的大小。
-b或-bytes 显示目录或文件大小时,以byte为单位。
-c或--total 除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。
-k或--kilobytes 以KB(1024bytes)为单位输出。
-m或--megabytes 以MB为单位输出。
-s或--summarize 仅显示总计,只列出最后加总的值。
-h或--human-readable 以K,M,G为单位,提高信息的可读性。
-x或--one-file-xystem 以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。
-L<符号链接>或--dereference<符号链接> 显示选项中所指定符号链接的源文件大小。
-S或--separate-dirs 显示个别目录的大小时,并不含其子目录的大小。
-X<文件>或--exclude-from=<文件> 在<文件>指定目录或文件。
--exclude=<目录或文件> 略过指定的目录或文件。
-D或--dereference-args 显示指定符号链接的源文件大小。
-H或--si 与-h参数相同,但是K,M,G是以1000为换算单位。
-l或--count-links 重复计算硬件链接的文件
示例如下:
显示指定文件大小
[root@localhost /]# touch wang.txt
[root@localhost /]# du wang.txt
0 wang.txt
显示当前目录总的大小:
[root@localhost /]#du -a(节选)
0 ./usr/local/share/man/man4
0 ./usr/local/share/man/man4x
0 ./usr/local/share/man/man5
0 ./usr/local/share/man/man5x
0 ./usr/local/share/man/man6
0 ./usr/local/share/man/man6x
0 ./usr/local/share/man/man7
0 ./usr/local/share/man/man7x
0 ./usr/local/share/man/man8
0 ./usr/local/share/man/man8x
0 ./usr/local/share/man/man9
0 ./usr/local/share/man/man9x
0 ./usr/local/share/man/mann
4 ./usr/local/share/man
4 ./usr/local/share
0 ./usr/local/src
8 ./usr/local
0 ./usr/src/debug
0 ./usr/src/kernels
0 ./usr/src
782268 ./usr
0 ./home
0 ./media
0 ./mnt
0 ./opt
0 ./srv
985868 .
只显示总和大小:
[root@localhost /]# du -s
985868
使用-sh查看用户、文件、目录的 大小:
[root@localhost /]# du -sh /boot
93M /boot
[root@localhost /]# du -sh /etc/passwd
4.0K /etc/passwd
[root@localhost /]# du -sh root
28K root
磁盘分区与格式化:
添加磁盘:
最后重启一下系统完成。
命令fdisk:
fdisk是linux下的分区工具,但是只能划分小于2TB的分区
命令格式为:
fdisk [-l] [设备名称]
[root@localhost ~]# fdisk -l
磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x0005b86b
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 411647 204800 83 Linux
/dev/sda2 411648 16035839 7812096 82 Linux swap / Solaris
/dev/sda3 16035840 41943039 12953600 83 Linux
磁盘 /dev/sdb:5368 MB, 5368709120 字节,10485760 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
添加成功。
划分分区;
[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0xb29d1532 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):m
命令操作
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
g create a new empty GPT partition table
G create an IRIX (SGI) partition table
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)
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
分区号 (1-4,默认 1):1-4
分区号 (1-4,默认 1):1
起始 扇区 (2048-10485759,默认为 2048):2018
值超出范围。
起始 扇区 (2048-10485759,默认为 2048):201^H48
值超出范围。
起始 扇区 (2048-10485759,默认为 2048):2048
Last 扇区, +扇区 or +size{K,M,G} (2048-10485759,默认为 10485759):
将使用默认值 10485759
分区 1 已设置为 Linux 类型,大小设为 5 GiB
按p查看已有磁盘的状态:
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:5368 MB, 5368709120 字节,10485760 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xb29d1532
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 10485759 5241856 83 Linux
扩展学习parted分区gpt格式
概念:parted只是个分区工具
当使用MBR分区表时最多只支持4个主分区或三个主分区和一个扩展分区
而GPT分区表对分区数量没有限制,但Windows最大仅支持128个GPT分区
参考文献:http://ask.apelearn.com/question/7243
挂载硬盘(也可以挂载光驱)mount 需要挂载的硬盘 到哪个路径下,/mnt 一般都挂载在这里目录下.
[root@localhost ~]# mount /dev/sdb /mnt/
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda3 13G 901M 12G 8% /
devtmpfs 904M 0 904M 0% /dev
tmpfs 913M 0 913M 0% /dev/shm
tmpfs 913M 8.6M 904M 1% /run
tmpfs 913M 0 913M 0% /sys/fs/cgroup
/dev/sda1 197M 103M 94M 53% /boot
tmpfs 183M 0 183M 0% /run/user/0
/dev/sdb 5.0G 33M 5.0G 1% /mnt
这里mount /dev/sdb 指的是盘符 分区号, /mnt/ 指的是需要挂载的路径,我们一般挂载硬盘或者光驱都默认挂载在这里。
--
也可以卸载,我们先给这个mnt里创建个文件和目录 umount
重新挂载一个硬盘 用mount -o remount,rw /dev/sdb /mnt
命令mkfs 文件类型
概念:Windows下的文件系统有FAT32和NTFS。
命令介绍
命令:mke2fs、mkfs.ext2、mkfs.ext3、mkfs.ext4、和mkfs.xfs
mke2fs命令常用的选项如下:
-b 表示分区时设定每个数据区块占用的空间大小,目前每个数据块支持1024B,2048B以及4096B
-i 表示设定inode的大小
-N 表示设定inode的数量,有时默认的inode不够用,所要要自定义
-c 表示在格式化前先检查一下磁盘是否有问题,加上这个选项以后,运行速度会非常慢。
-L 表示预设该分区的标签(label)
-j 表示建立ext3格式的分区,如果使用mkfs.ext3格式 就不需要加这个选项了
-t 比用来指定文件系统的类型.
/etc/fstab 配置文件 (挂载配置文件)
系统启动时需要挂载的各个分区,各列的含义如下:
第一列:分区的标识,可以写分区的LABEL、分区的UUID
第二列:就是挂载点
第三列:就是分区的格式
第四列:就是mount的挂载参数,一般直接写defaults
第五列:数字表示是否被dump备份,1表示备份,0表示不备份
第六列:表示开机时是否自检磁盘,1和2都表示检测,0表示不检测.
设备文件:指定要创建的文件系统的分区设备文件名
块数:指定要创建文件系统的磁盘块数量
手动增加swap空间 (虚拟内存):
概念:它类似于Windows的虚拟内存,分区时一般制定虚拟内存的大小实际内存的2倍,如果实际内存超过了4GB,那么划分9GB给虚拟内存就足够日常交换了。
假如说虚拟内存不够用的情况,就必须增加一个虚拟磁盘,因为我们不可能重新给磁盘分区。
增加虚拟磁盘的基本思路:
建立 swap file - 格式化为swap格式 - 启用该虚拟磁盘
首先建立一个swap file:
[root@localhost ~]# dd if=/dev/zero of=/tmp/newdisk bs=1M count=1M
^C
记录了3719+0 的读入
记录了3719+0 的写出
3899654144字节(3.9 GB)已复制,100.291 秒,38.9 MB/秒
dd是用来操作磁盘 可读可写 ,if 从哪里读取 /dev/zero是内核一个源源不断创建0的文件,of 指定写到哪里去 /tmp/newdisk 这个文件是把读取出来的信息 放到net disk目录下,bs指定每个块的大小,count定义块的数量。
[root@localhost /]# mkswap -f /tmp/newdisk
正在设置交换空间版本 1,大小 = 3808252 KiB
无标签,UUID=e63644de-5129-4ec1-9c72-7b3e57d9dadc
查看目前的swap有多大 free -m
[root@localhost /]# free -m
total used free shared buff/cache available
Mem: 1824 119 69 8 1635 1521
Swap: 7628 0 7628
把刚新增加的虚拟内存添加进去swapon
[root@localhost /]# swapon /tmp/newdisk
swapon: /tmp/newdisk:不安全的权限 0644,建议使用 0600。
[root@localhost /]# free -m
total used free shared buff/cache available
Mem: 1824 122 66 8 1635 1518
Swap: 11347 0 11347
LVM讲解:
LVM讲解(扩容缩容)
概念:LVM是logical volume manager的缩写(逻辑分区),方便对于对圈组、逻辑卷的大小进行调整,更进一步调整文件系统的大小。
优点:在使用很多硬盘的大系统中,使用LVM主要是方便管理、增加了系统的扩展性。
准备磁盘分区,先把硬盘umount
第一步:
添加硬盘进行分区:
[root@localhost ~]# fdisk /dev/sdb
第二步:创建三个新分区,分别是1G, n
第三步:-t 改变分区类型为8e(LVM),只有这样才可以做物理卷
命令(输入 m 获取帮助):t
分区号 (1,2,默认 2):1
Hex 代码(输入 L 列出所有代码):8e
.
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 2099199 1048576 8e Linux LVM
/dev/sdb2 2099200 4196351 1048576 8e Linux LVM
/dev/sdb3 4196352 6293503 1048576 8e Linux LVM
接下来准备物理卷
安装个命令 pvcreate(创建物理卷、列出当卡物理卷、删除物理卷)
如果在这里你知道这个命令,但是你安装不了这个包,那就使用如下命令安装,利用通配的命令安装
[root@localhost ~]# yum provides "/*/pvcreate" 根下所有文件里面pvcreate的命令
[root@localhost ~]# yum install -y lvm2 #ok,依赖包都安装完毕
如果创建完分区后,目录下并没有这个路径,使用 partprobe添加进去
[root@localhost ~]# ls /dev/sdb1
ls: cannot access /dev/sdb1: No such file or directory #没有那个文件或目录
[root@localhost ~]# partprobe 添加分区的路径,自动生成
[root@localhost ~]# ls /dev/sdb1 查看分区是否存在
/dev/sdb1
接下来把三个分区,全部改成物理卷
[root@localhost ~]# pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created. #已成功创建物理卷
[root@localhost ~]# pvcreate /dev/sdb2
Physical volume "/dev/sdb2" successfully created. #已成功创建物理卷
[root@localhost ~]# pvcreate /dev/sdb3
Physical volume "/dev/sdb3" successfully created. #已成功创建物理卷
**物理机创建完成以后,用pvdisplay查看一下物理卷**
[root@localhost ~]# pvdisplay
或者root@localhost ~]# pvs
创建卷组vgcreate vg1 /dev/sdb1 /dev/sdb2,vg1是卷组的名字
[root@localhost ~]# vgcreate vg1 /dev/sdb1 /dev/sdb2
Volume group "vg1" successfully created #创建成功
查看卷组的信息 vgdisplay或者vgs
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg1 2 0 0 wz--n- 1.99g 1.99g
vgremove 删除卷组的命令
创建逻辑卷
[root@localhost ~]# lvcreate -L 100M -n lv1 vg1
Logical volume "lv1" created. #创建成功
lvcreate创建逻辑卷,-L 100M指定大小,-n lv1 逻辑卷的名字,vg1从卷组里面调用出来
格式化成mkfs.ext4,适合做扩容
[root@localhost ~]# mkfs.ext4 /dev/vg1/lv1
挂载逻辑卷
[root@localhost ~]# mount /dev/vg1/lv1 /mnt/ #挂载到/mnt/下
[root@localhost ~]# df -h #查看挂载
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 18G 1.1G 17G 7% /
devtmpfs 483M 0 483M 0% /dev
tmpfs 493M 0 493M 0% /dev/shm
tmpfs 493M 6.8M 486M 2% /run
tmpfs 493M 0 493M 0% /sys/fs/cgroup
/dev/sda1 197M 97M 100M 50% /boot
tmpfs 99M 0 99M 0% /run/user/0
/dev/mapper/vg1-lv1 93M 1.6M 85M 2% /mnt #这里名字怎么跟挂载的不一样呢,下面会解释
用ls -l 查看一下这俩个路径的依赖关系。
.
下面来做一下扩容的操作,先创建个目录和文件
[root@localhost ~]# mkdir /mnt/111 #创建个目录
[root@localhost ~]# touch /mnt/222.txt #创建个文件
[root@localhost ~]# echo "123123123" > /mnt/222.txt #给文件里追加文字
扩容逻辑卷
重新设置卷大小,先umount
[root@localhost ~]# lvresize -L 200M /dev/vg1/lv1
检查磁盘错误 (ext4执行)
[root@localhost ~]# e2fsck -f /dev/vg1/lv1
e2fsck 1.42.9 (28-Dec-2013)
Pass 1: Checking inodes, blocks, and sizes #检查inodes,块和大小
Pass 2: Checking directory structure #检查目录结构
Pass 3: Checking directory connectivity #检查目录链接
Pass 4: Checking reference counts #检查引用计数
Pass 5: Checking group summary information #检查组摘要信息
/dev/vg1/lv1: 13/25688 files (7.7% non-contiguous), 8899/102400 blocks
更新逻辑卷信息,如果不更新,再挂载的时候无法更新新的大小(ext4执行)
[root@localhost ~]# resize2fs /dev/vg1/lv1
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/vg1/lv1 to 204800 (1k) blocks. #调整文件系统到204800(1K)块的大小
The filesystem on /dev/vg1/lv1 is now 204800 blocks long. #文件系统上 现在是204800大小。
挂载,在查看文件大小
[root@localhost ~]# !mount
mount /dev/vg1/lv1 /mnt/
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 18G 1.1G 17G 7% /
devtmpfs 483M 0 483M 0% /dev
tmpfs 493M 0 493M 0% /dev/shm
tmpfs 493M 6.8M 486M 2% /run
tmpfs 493M 0 493M 0% /sys/fs/cgroup
/dev/sda1 197M 97M 100M 50% /boot
tmpfs 99M 0 99M 0% /run/user/0
/dev/mapper/vg1-lv1 190M 1.6M 175M 1% /mnt #注意这一行,容量是190M,已使用1.6M,可用175M. 修改完成。
磁盘在Linux中的表示
Linux所有设备都被抽象为一个文件,保存在/dev/目录下
磁盘按接口分为:(IDE、SATA、SAS、SCSI、USB)
IDE磁盘名称一般为:hd【a-z】,【a-z】代表第几块磁盘;
SATA磁盘、SAS硬盘、SCSI硬盘、USB磁盘名称一般为:sd【a-z】,【a-z】代表第几块磁盘;
例如:第一块sata磁盘表示为:/dev/sda
第二块sata磁盘表示为/dev/sdb
底下列出几个常见的装置与其在Linux当中的档名
分区概念
将一个磁盘逻辑的分为几个区,每个区当做独立磁盘,以方便使用和管理
不同分区的名称一般为:设备名称+分区号
例如:第一块硬盘的第一个分区叫sda1,第一块硬盘的第二个分区sda2
第二块硬盘的第一个分区叫sdb1,第二块硬盘的第二个分区叫sdb2
*分区并不是硬盘的物理功能,而是软件功能
*主流的分区机制分为MBR和GPT两种
MBR是PC架构计算机中使用的最为广泛的分区机制
MBR
MBR(Master Boot Record)是传统的分区机制,应用于绝大多数使用BIOS引导的PC设备(苹果使用EFI的方式);很多Server服务器即支持BIOS也支持EFI的引导方式
MBR的特点
优点:MBR支持32bit和64bit系统;
缺点: MBR支持的分区数量有限制;2)MBR只支持不超过2TB的硬盘,超过2TB的硬盘只能使用2TB的空间(但是有第三方解决方法),应为MBR的寻址空间只有32bit长;
MBR结构:占用硬盘最开头的512字节
前446字节为:引导代码(Bootstrap Code Area)(引导不同的操作系统;不同操作系统,引导代码是不一样的)
接下来的为4个16字节:分别对应4个主分区表信息(Primary Partition Table)
最后2个字节:为启动标示(Boot Signature),永远都是55和AA;55和AA是个永久性的标示,代表这个硬盘是可启动的。
MBR分区
MBR分区分为:主分区、扩展分区、逻辑分区
主分区:一块硬盘最多只能创建4个主分区(因为在MBR分区表结构中中最多可以创建4个主分区表信息,也就是4个16字节的空间,如上图)
扩展分区:一个扩展分区会占用一个主分区的位置
逻辑分区:
是基于扩展分区创建出来的,先有扩展分区,然后在扩展分区的基础上再创建逻辑分区;也就是说我们要使用逻辑分区,必须先要创建扩展分区;
扩展分区的空间是不能被直接使用的,我们必须在扩展分区的基础上去建立逻辑分区,才能够被使用;
Linux最多支持63个IDE分区和15个SCSI分区
PEL:Primary Partition;Extended Partition;Logical Partition
GPT
GPT(GUID Partition Table):是一个较新的分区机制,解决了MBR的很多缺点
1)支持超过2TB的磁盘:GPT有64bit寻址空间;而MBR对硬盘空间地址寻址最多只支持32bit,2的32次方,硬盘空间是以地址方式来被识别的,所以MBR只支持容量为2TB以内的磁盘
向后兼容MBR
但是底层硬件必须支持UEFI(Intel提出的取代BIOS的新一代的引导系统)才能使用,也就是底层硬件必须使用UEFI
必须使用64位操作系统
Mac、LInux系统都能支持GPT分区格式
Windows 7 64bit、Windows Server2008 64bit支持GPT
磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构成的具有冗余能力的阵列”之意。
磁盘阵列是由很多价格较便宜的磁盘,组合成一个容量巨大的磁盘组,利用个别磁盘提供数据所产生加成效果提升整个磁盘系统效能。利用这项技术,将数据切割成许多区段,分别存放在各个硬盘上。
磁盘阵列还能利用同位检查(Parity Check)的观念,在数组中任意一个硬盘故障时,仍可读出数据,在数据重构时,将数据经计算后重新置入新硬盘中。
优点
提高传输速率。
通过数据校验提供容错功能。
缺点
RAID0没有冗余功能,如果一个磁盘(物理)损坏,则所有的数据都无法使用。
RAID1磁盘的利用率最高只能达到50%(使用两块盘的情况下),是所有RAID级别中最低的。
RAID0+1以理解为是RAID 0和RAID 1的折中方案。RAID 0+1可以为系统提供数据安全保障,但保障程度要比 Mirror低而磁盘空间利用率要比Mirror高。
随着主机、磁盘、网络等技术的发展,数据存储的方式和架构也在一直不停改变,本文主要介绍目前主流的存储架构。
存储的分类
根据服务器类型分为:
封闭系统的存储(封闭系统主要指大型机)
Windows、UNIX、Linux等操作系统的服务器)
开放系统的存储分为:内置存储和外挂存储;
外挂存储根据连接的方式分为:直连式存储(Direct-Attached Storage,简称DAS)和网络化存储(Fabric-Attached Storage,简称FAS);网络化存储根据传输协议又分为:网络接入存储(Network-Attached Storage,简称NAS)和存储区域网络(Storage Area Network,简称SAN)。