这篇博文主要总结了Linux磁盘的一些操作,主要是硬盘的加载,分区(MBR分区和GPT分区),分区的挂载,以及swap分区的加载设置。
基础命令
- df查看磁盘分区使用状况
- -l //仅显示本地磁盘(默认)
- -a //显示所有文件系统的磁盘使用情况,包含比如/proc/
- -h //以1024进制计算最合适的单位显示磁盘容量
- -H //以1000进制计算最合适的单位显示磁盘容量
- -t //显示指定类型文件系统的磁盘分区
- -T //显示磁盘分区类型
- -x //不显示指定类型文件系统的磁盘分区
- du统计磁盘上的文件大小
- -b //以byte为单位统计文件
- -k //以KB为单位统计文件
- -m //以MB为单位统计文件
- -h //以1024进制计算最合适的单位显示磁盘容量
- -H //以1000进制计算最合适的单位显示磁盘容量
- -s //统计指定目标
- 常用命令
- df -lhT
- df -lhT -t ext4(分区类型)
- df -lhT -x ext4
- du -s [指定目录]
- du -sb *.zip //模糊匹配
- du -sm *.zip
- du -sh *.zip
回顾磁盘分区时的注意事项:
- 主分区和扩展分区总数不能超过4个。
- 扩展分区最多只能有一个
- 扩展分区不能直接存取数据
- 小知识:
- Linux系统中硬件设备都是以文件的形式存在于根目录下的Dev目录下。
- 硬件设备都是有Linux系统自动识别的。
- 添加的新硬盘,必须进行分区、格式化、挂载后才能使用。
- MBR分区模式:主分区不超过4个,单个分区容量最大为2TB
- GPT分区模式:主分区个数“几乎”没有限制,单个分区容量“几乎”没有限制。GPT分区中,最多可以支持128个主分区,且每个分区的大小突破了MBR分区的2TB的限制,最大为18EB=18432PB=18874368TB。缺点是GPT的主分区中,不适合安装X86架构的系统。
当硬盘空间消耗殆尽时怎么办?
比较好的做法应该是:在保留原硬盘的基础上,给服务器添加新的硬盘。
为虚拟机添加硬盘
- 将虚拟机关机(poweroff)。(当然,也有服务器的主板支持热插拔的。可以带电连接新硬盘。)
- 虚拟机设置->下面的“添加”->类型选择“硬盘”->下一步->选择硬盘类型(默认的(SCSI)就好)->创建一个新的虚拟机硬盘(下一步)->设置磁盘最大值;(没什么特殊要求,基本都是下一步,最后一步OK)。
- 重启Linux系统,使用fdisk -l//显示每个硬盘的分区列表(新添加的硬盘是没有分区表的)可以看到Disk /dev/sdb:和Disk /dev/sda:2块硬盘,以及sda的分区表,没有sdb的分区表。
- 先使用MBR分区模式为sdb分区。
[root@joe dev]#
fdisk /dev/sdb//进入分区模式 Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel Building a new DOS disklabel with disk identifier 0x9ce83f46. Changes will remain in memory only, until you decide to write them. After that, of course, the previous content won't be recoverable. Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite) 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 //修改分区的系统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)//主分区 p Partition number (1-4):
1First cylinder (1-2610, default 1): //扇区的范围(1-2610),默认开始1,直接回车则使用默认数值 Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): 500M Command (m for help): p Disk /dev/sdb: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 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: 0x9ce83f46 Device Boot Start End Blocks Id System /dev/sdb1 1 500 4016218+ 83 Linux //分配好的主分区1 //添加第二个分区 Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): Value out of range. Partition number (1-4): 2 First cylinder (501-2610, default 501): Using default value 501 Last cylinder, +cylinders or +size{K,M,G} (501-2610, default 2610): 500M Value out of range. Last cylinder, +cylinders or +size{K,M,G} (501-2610, default 2610): Using default value 2610 Command (m for help): p Disk /dev/sdb: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 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: 0x9ce83f46 Device Boot Start End Blocks Id System /dev/sdb1 1 500 4016218+ 83 Linux /dev/sdb2 501 2610 16948575 83 Linux //第二个分区 //由于分配不合适主观意愿,想删除分区 Command (m for help): d Partition number (1-4):
2//分区编号 Command (m for help): p Disk /dev/sdb: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 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: 0x9ce83f46 Device Boot Start End Blocks Id System /dev/sdb1 1 500 4016218+ 83 Linux //第二个分区已经删除 Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4):
2First cylinder (501-2610, default 501): Using default value 501 Last cylinder, +cylinders or +size{K,M,G} (501-2610, default 2610): 1000 Command (m for help): p Disk /dev/sdb: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 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: 0x9ce83f46 Device Boot Start End Blocks Id System /dev/sdb1 1 500 4016218+ 83 Linux /dev/sdb2 501 1000 4016250 83 Linux Command (m for help): n Command action e extended p primary partition (1-4) e //建立扩展分区 Partition number (1-4):
3First cylinder (1001-2610, default 1001): Using default value 1001 Last cylinder, +cylinders or +size{K,M,G} (1001-2610, default 2610): Using default value 2610 Command (m for help): p Disk /dev/sdb: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 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: 0x9ce83f46 Device Boot Start End Blocks Id System /dev/sdb1 1 500 4016218+ 83 Linux /dev/sdb2 501 1000 4016250 83 Linux /dev/sdb3 1001 2610 12932325 5 Extended Command (m for help): n Command action l logical (
5 or over)//此时扩展分区e没有了,说明MBR只能有一个扩展分区,接下来是逻辑分区 p primary partition (1-4) l First cylinder (1001-2610, default 1001): Using default value 1001 Last cylinder, +cylinders or +size{K,M,G} (1001-2610, default 2610): 1500 Command (m for help): p Disk /dev/sdb: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 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: 0x9ce83f46 Device Boot Start End Blocks Id System /dev/sdb1 1 500 4016218+ 83 Linux /dev/sdb2 501 1000 4016250 83 Linux /dev/sdb3 1001 2610 12932325 5 Extended /dev/sdb5 1001 1500 4016218+ 83 Linux //逻辑分区是从5开始的,1-4只能是主分区和扩展分区的编号 Command (m for help): n Command action l logical (5 or over) p primary partition (1-4) l First cylinder (1501-2610, default 1501): Using default value 1501 Last cylinder, +cylinders or +size{K,M,G} (1501-2610, default 2610): Using default value 2610 Command (m for help): p Disk /dev/sdb: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 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: 0x9ce83f46 Device Boot Start End Blocks Id System /dev/sdb1 1 500 4016218+ 83 Linux /dev/sdb2 501 1000 4016250 83 Linux /dev/sdb3 1001 2610 12932325 5 Extended /dev/sdb5 1001 1500 4016218+ 83 Linux /dev/sdb6 1501 2610 8916043+ 83 Linux Command (m for help):
w //保存写The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. [root@joe dev]# fdisk
-l Disk
/dev/sdb: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 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: 0x9ce83f46 Device Boot Start End Blocks Id System /dev/sdb1 1 500 4016218+ 83 Linux /dev/sdb2 501 1000 4016250 83 Linux /dev/sdb3 1001 2610 12932325 5 Extended /dev/sdb5 1001 1500 4016218+ 83 Linux /dev/sdb6 1501 2610 8916043+ 83 Linux Disk
/dev/sda: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 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: 0x000a030a Device Boot Start End Blocks Id System /dev/sda1 * 1 26 204800 83 Linux Partition 1 does not end on cylinder boundary. /dev/sda2 26 281 2048000 82 Linux swap / Solaris Partition 2 does not end on cylinder boundary. /dev/sda3 281 536 2048000 83 Linux Partition 3 does not end on cylinder boundary. /dev/sda4 536 2611 16669696 5 Extended /dev/sda5 536 2611 16668672 83 Linux
- 使用GPT分区模式分区(同时GPT的分区工具parted也可以MBR分区)
[root@joe dev]# parted GNU Parted 2.1 使用
/dev/sda//注意正在使用的是sda Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) print all Model: VMware, VMware Virtual S (scsi) Disk /dev/sda: 21.5GB Sector size (logical/physical): 512B/512B Partition Table: msdos Number Start End Size Type File system 标志 1 1049kB 211MB 210MB primary ext4 启动 2 211MB 2308MB 2097MB primary linux-swap(v1) 3 2308MB 4405MB 2097MB primary ext4 4 4405MB 21.5GB 17.1GB extended 5 4406MB 21.5GB 17.1GB logical ext4 Model: VMware, VMware Virtual S (scsi) Disk
/dev/sdb:21.5GB Sector size (logical/physical): 512B/512B Partition Table: msdos //sdb的应该是我们需要的gpt Number Start End Size Type File system 标志 警告: 无法以读写方式打开 /dev/sr0 (只读文件系统)。/dev/sr0 已按照只读方式打开。 错误: /dev/sr0: unrecognised disk label (parted)
select /dev/sdb//选择sdb 使用 /dev/sdb (parted) mkpart //如果不进行gpt的选择设置,直接mkpart那么我们还是使用的MBR模式 分区类型? primary/主分区/extended/扩展分区? primary 文件系统类型? [ext2]? ^Z -------------------------------------------------------------------------------------------------- (parted)
select /dev/sdb 使用 /dev/sdb (parted) mklabel gpt 警告: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to continue? 是/Yes/否/No? yes (parted) print all Model: VMware, VMware Virtual S (scsi) Disk
/dev/sda:21.5GB Sector size (logical/physical): 512B/512B Partition Table: msdos Number Start End Size Type File system 标志 1 1049kB 211MB 210MB primary ext4 启动 2 211MB 2308MB 2097MB primary linux-swap(v1) 3 2308MB 4405MB 2097MB primary ext4 4 4405MB 21.5GB 17.1GB extended 5 4406MB 21.5GB 17.1GB logical ext4 Model: VMware, VMware Virtual S (scsi) Disk
/dev/sdb:21.5GB Sector size (logical/physical): 512B/512B Partition Table: gpt Number Start End Size File system Name 标志 警告: 无法以读写方式打开 /dev/sr0 (只读文件系统)。/dev/sr0 已按照只读方式打开。 错误: /dev/sr0: unrecognised disk label (parted) mkpart 分区名称? []? test1 文件系统类型? [ext2]? ext4 起始点?
1//以1开始,默认单位是M unit GB 指定为GB为单位 结束点? 1000M (parted) print Model: VMware, VMware Virtual S (scsi) Disk /dev/sdb: 21.5GB Sector size (logical/physical): 512B/512B Partition Table: gpt Number Start End Size File system Name 标志 1 1049kB 1000MB 999MB test1 (parted)
rm 1//删除分区 (parted) print Model: VMware, VMware Virtual S (scsi) Disk /dev/sdb: 21.5GB Sector size (logical/physical): 512B/512B Partition Table: gpt Number Start End Size File system Name 标志 (parted) mkpart 分区名称? []? test1 文件系统类型? [ext2]? ext4 起始点?0 //以0开始,出现了警告,这里是字节对齐的原因造成的,所以一般为了避免警告,我们不以0开始。 结束点? 1000M 警告: The resulting partition is not properly aligned for best performance. 忽略/Ignore/放弃/Cancel? cancel (parted) mkpart 分区名称? []? test1 文件系统类型? [ext2]? ext4 起始点?1 结束点?1000M (parted) print Model: VMware, VMware Virtual S (scsi) Disk /dev/sdb: 21.5GB Sector size (logical/physical): 512B/512B Partition Table: gpt Number Start End Size File system Name 标志 1 1049kB 1000MB 999MB test1 (parted) mkpart 分区名称? []? test2 文件系统类型? [ext2]? ext4 起始点? 1000M 结束点? 1500M (parted) print Model: VMware, VMware Virtual S (scsi) Disk /dev/sdb: 21.5GB Sector size (logical/physical): 512B/512B Partition Table: gpt Number Start End Size File system Name 标志 1 1049kB 1000MB 999MB test1 2 1000MB 1500MB 500MB test2 //上面是交互模式,下面是命令模式 (parted) mkpart test3
1500 3000//使用一条命令直接搞定 分区名 起始位 结束位 警告: The resulting partition is not properly aligned for best performance. //出现分区的原因是起始的1500和上次结束的1500重叠了。 忽略/Ignore/放弃/Cancel? cancel (parted) mkpart test3 1501M 1700M (parted) mkpart test4 1701M 1800M (parted) mkpart test5 1801M 1900M (parted) print Model: VMware, VMware Virtual S (scsi) Disk /dev/sdb: 21.5GB Sector size (logical/physical): 512B/512B Partition Table: gpt Number Start End Size File system Name 标志 1 1049kB 1000MB 999MB test1 2 1000MB 1500MB 500MB test2 3 1501MB 1700MB 199MB test3 4 1701MB 1800MB 99.6MB test4 5 1801MB 1900MB 98.6MB test5 (parted)
rm 5(parted) quit
- 分区完以后,就是格式化和挂载分区了。也就是设置文件系统。在这里需要注意以下内容:MBR分区只能格式化主分区和扩展分区,逻辑分无不能格式化 GPT分区,在格式化以后,只能使用parted 的print查看格式结果 挂载分区:分区默认的挂载目录/mnt目录挂载点必须存在。
[root@joe dev]#
ls -l /dev/sdb*brw-rw----. 1 root disk 8, 16 5月 7 01:18 /dev/sdb brw-rw----. 1 root disk 8, 17 5月 7 01:18 /dev/sdb1 brw-rw----. 1 root disk 8, 18 5月 7 01:18 /dev/sdb2 brw-rw----. 1 root disk 8, 19 5月 7 01:18 /dev/sdb3 brw-rw----. 1 root disk 8, 21 5月 7 01:18 /dev/sdb5 brw-rw----. 1 root disk 8, 22 5月 7 01:18 /dev/sdb6 [root@joe dev]# mkfs.ext3
/dev/sdb1//第一种设置方式 mke2fs 1.41.12 (17-May-2010) 文件系统标签= 操作系统:Linux 块大小=4096 (log=2) 分块大小=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 502944 inodes, 2008117 blocks 100405 blocks (5.00%) reserved for the super user 第一个数据块=0 Maximum filesystem blocks=2059403264 62 block groups 32768 blocks per group, 32768 fragments per group 8112 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632 正在写入inode表: 完成 Creating journal (32768 blocks): 完成 Writing superblocks and filesystem accounting information: 完成 This filesystem will be automatically checked every 23 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. [root@joe dev]# mkfs
-t ext4 /dev/sdb2//第二种方法 mke2fs 1.41.12 (17-May-2010) 文件系统标签= 操作系统:Linux 块大小=4096 (log=2) 分块大小=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 50288 inodes, 200812 blocks 10040 blocks (5.00%) reserved for the super user 第一个数据块=0 Maximum filesystem blocks=209715200 7 block groups 32768 blocks per group, 32768 fragments per group 7184 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840 正在写入inode表: 完成 Creating journal (4096 blocks): 完成 Writing superblocks and filesystem accounting information: 完成 This filesystem will be automatically checked every 26 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. [root@joe dev]#
mkdir -p /mnt/joetest//首先建立挂载点 [root@joe dev]#
mount /dev/sdb1 /mnt/joetest///挂载分区 [root@joe dev]#
umount /mnt/joetest///卸载挂载点 上面这中挂载方式是临时的,永久性的应该如下: vim
+ /etc/fstab 在末尾插入一行
/dev/sdb1 /mnt/imooc ext3 default 0 0设备名称 挂载点 文件系统类型 保存退出即可
- swap交换分区(步骤为:建立一个普通的Linux分区,修改分区类型的16进制编码,格式化交换分区,启用交换分区。
[root@joe dev]#
fdisk /dev/sdb WARNING: GPT (GUID Partition Table) detected on '/dev/sdb'! The util fdisk doesn't support GPT. Use GNU Parted. 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): p Disk /dev/sdb: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 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 1000 8032468+ 83 Linux /dev/sdb2 1001 1100 803250 83 Linux /dev/sdb3 1101 2610 12129075 5 Extended /dev/sdb5 1101 1500 3212968+ 83 Linux /dev/sdb6 1501 2610 8916043+ 83 Linux Command (m for help): t Partition number (1-6):
2//修改ID 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 DRDOS/sec (FAT- 2 XENIX root 3c PartitionMagic
83 Linuxc4 DRDOS/sec (FAT- 3 XENIX usr 40 Venix 80286 84 OS/2 hidden C: c6 DRDOS/sec (FAT- Hex code (type L to list codes): 82 Changed system type of partition 2 to 82 (Linux swap / Solaris) Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. [root@joe dev]# fdisk
/dev/sdb WARNING: GPT (GUID Partition Table) detected on '/dev/sdb'! The util fdisk doesn't support GPT. Use GNU Parted. 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): p Disk /dev/sdb: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 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 1000 8032468+ 83 Linux /dev/sdb2 1001 1100 803250
82 Linux swap /Solaris /dev/sdb3 1101 2610 12129075 5 Extended /dev/sdb5 1101 1500 3212968+ 83 Linux /dev/sdb6 1501 2610 8916043+ 83 Linux Command (m for help): q [root@joe dev]# mkswap
/dev/sdb2//设置交换区 Setting up swapspace version 1, size = 803244 KiB no label, UUID=c7d31434-4013-4bbb-b68e-29b501934377 [root@joe dev]# swapon
/dev/sdb2//开启交换区 [root@joe dev]# free total used free shared buffers cached Mem: 1030612 132468 898144 0 13612 51388 -/+ buffers/cache: 67468 963144 Swap:
2851232 0 2851232[root@joe dev]# swapoff
/dev/sdb2//关闭交换区 [root@joe dev]#