Linux fdisk磁盘操作与挂载

336 阅读7分钟

fdisk命令格式化硬盘

  1. 查看硬盘情况

    # 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,没有被分区。

  2. 初始化新挂的磁盘

    我们要做的事情就是对磁盘/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.
    
    1. 在使用fdisk对磁盘进行格式化的过程中,在command输入窗口,可以输入m获取帮助。
    2. 常规情况下,我们一般不需要设置分区的系统ID,使用默认的即可。但是某些特殊情况下,需要手动设置。设置方式,在Command命令输入窗口。输入t,按回车,根据提示完成分区的系统ID设置。比如说,对于lvm分区,依次输入:t -> 8e -> w。
  3. 格式化新的分区

    执行 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

  4. 挂载新的分区

    假设我当前需要把新的分区挂载到/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.的报错。

  5. 设置开机自动挂载分区

    如上的挂载,当操作系统重新启动之后就会失效。需要设置开启自动挂载:执行命令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  

问题解决

  1. 执行 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重新读取分区信息

  2. 若partprobe不能解决问题,则重启系统。