fdisk命令格式化硬盘
-
查看硬盘情况
# fdisk -l Disk /dev/vda: 42.9 GB, 42949672960 bytes, 83886080 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x000c7bcb Device Boot Start End Blocks Id System /dev/vda1 * 2048 83886046 41941999+ 83 Linux Disk /dev/vdb: 21.5 GB, 21474836480 bytes, 41943040 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x8b1332ff Device Boot Start End Blocks Id System
如上,可以看到,当前系统里面挂载了/dev/vda和/dev/vdb两块硬盘。其中/dev/vda分了一个区/dev/vda1,/dev/vdb大小为21.5G,没有被分区。
-
初始化新挂的磁盘
我们要做的事情就是对磁盘/dev/vdb进行分区和挂载。执行 fdisk /dev/vdb命令,默认情况下,一路回车。回到Command (m for help):时,输入w写入并退出。
# fdisk /dev/vdb Welcome to fdisk (util-linux 2.23.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): Using default response p Partition number (1-4, default 1): First sector (2048-41943039, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): Using default value 41943039 Partition 1 of type Linux and of size 20 GiB is set Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
- 在使用fdisk对磁盘进行格式化的过程中,在command输入窗口,可以输入m获取帮助。
- 常规情况下,我们一般不需要设置分区的系统ID,使用默认的即可。但是某些特殊情况下,需要手动设置。设置方式,在Command命令输入窗口。输入t,按回车,根据提示完成分区的系统ID设置。比如说,对于lvm分区,依次输入:t -> 8e -> w。
-
格式化新的分区
执行 fdisk -l 命令查看当前的分区情况
# fdisk -l Disk /dev/vda: 42.9 GB, 42949672960 bytes, 83886080 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x000c7bcb Device Boot Start End Blocks Id System /dev/vda1 * 2048 83886046 41941999+ 83 Linux Disk /dev/vdb: 21.5 GB, 21474836480 bytes, 41943040 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x8b1332ff Device Boot Start End Blocks Id System /dev/vdb1 2048 41943039 20970496 83 Linux
如上,可以看到,/dev/vdb这块硬盘已经被分出一个分区:/dev/vdb1 ,通过命令对其进行格式化为指定的文件系统格式。本处,我们以格式化为ext4为例:执行 mkfs.ext4 /dev/vdb1
# mkfs.ext4 /dev/vdb1 mke2fs 1.42.9 (28-Dec-2013) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 1310720 inodes, 5242624 blocks 262131 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=2153775104 160 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done
linux存在不同的文件系统,可以对比理解windows存在ntfs文件系统和fat32文件系统。目前比较常用的是ext4和xfs。只有格式化为某种文件系统之后,该分区才能被挂载使用。如上,使用的格式化命令为:mkfs.ext4,显而易见,这是把磁盘格式化为ext4文件系统的命令。同理,把磁盘格式化为xfs文件系统的命令为:mkfs.xfs
-
挂载新的分区
假设我当前需要把新的分区挂载到/app文件夹下,我们需要做如下操作:
若不存在/app文件夹,需要先创建。
# mkdir /app
执行mount命令挂载分区:
# mount /dev/vdb1 /app # df -h devtmpfs 1.9G 0 1.9G 0% /dev tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs 1.9G 492K 1.9G 1% /run tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup /dev/vda1 40G 3.0G 35G 8% / tmpfs 379M 0 379M 0% /run/user/0 /dev/vdb1 20G 45M 19G 1% /app
如上,通过df -h可以看见/dev/vdb1已经被挂载到了/app目录下面。
**关于linux硬盘的挂载:**linux的文件夹由根目录开始。,可以理解为所有的文件夹组成了一棵目录树,每一个末端的文件夹,可以看做一个叶子节点。每个叶子结点都可以挂载一个分区。本人建议已经挂载过分区的文件下面的子节点再次挂载分区。经测试,这种情况下,当要umount 上级挂载的时候,会出现umount: target is busy.的报错。
-
设置开机自动挂载分区
如上的挂载,当操作系统重新启动之后就会失效。需要设置开启自动挂载:执行命令vim /etc/fstab,增加如下一行:
/dev/vdb1 /app ext4 defaults 1 2
# vim /etc/fstab /dev/vdb1 /app ext4 defaults 1 2
常见报错解决
umount target is busy报错解决
通过,使用fuser命令杀死占用的进程。
fuser命令的作用是使用文件或文件结构识别进程。
语法:fuser (选项) (参数)
参数为:
-a:显示命令行中指定的所有文件; -k:杀死访问指定文件的所有进程; -i:杀死进程前需要用户进行确认; -l:列出所有已知信号名; -m:指定一个被加载的文件系统或一个被加载的块设备; -n:选择不同的名称空间; -u:在每个进程后显示所属的用户名。
查看使用的进程:
# fuser -mv /app
杀死占用的进程:
# fuser -kv /app
磁盘分区保存之后报如下警告问题解决
创建/dev/vdb2分区,w保存之后,报如下警告:
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
fdisk -l命令能看到该分区,但是lsblk却看不到。
# fdisk -l
磁盘 /dev/vdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x8b1332ff
设备 Boot Start End Blocks Id System
/dev/vdb1 2048 20000000 9998976+ 83 Linux
/dev/vdb2 20000768 41943039 10971136 83 Linux
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 253:0 0 40G 0 disk
└─vda1 253:1 0 40G 0 part /
vdb 253:16 0 20G 0 disk
└─vdb1 253:17 0 9.5G 0 part
└─user-app 252:0 0 9.5G 0 lvm
问题解决
-
执行 partprobe 命令
# partprobe # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 253:0 0 40G 0 disk └─vda1 253:1 0 40G 0 part / vdb 253:16 0 20G 0 disk ├─vdb1 253:17 0 9.5G 0 part │ └─user-app 252:0 0 9.5G 0 lvm └─vdb2 253:18 0 10.5G 0 part
执行partprobe可以使kernel重新读取分区信息
-
若partprobe不能解决问题,则重启系统。