Linux 磁盘与文件系统管理
---------------------------------------------------------------------------------------------------------------------------------------------
各种接口的磁盘在 Linux 中的文件名分别为:
● /dev/sd[a-p][1-15]:为SCSI, SATA, USB, Flash 等接口磁盘文件名;
● /dev/hd[a-d][1-63]:为 IDE 接口的磁盘文件名;
1. 认识文件系统
---------------------------------------------------------------------------------------------------------------------------------------------
查看 Linux 支持哪些文件系统,查看如下目录:
[root@www ~]# ls -l /lib/modules/$(uname -r)/kernel/fs
系统当前已加载到内存中支持的文件系统则有:
[root@www ~]# cat /proc/filesystems
■ Linux VFS (Virtual Filesystem Switch)
-----------------------------------------------------------------------------------------------------------------------------------------
其实,整个 Linux 系统通过一个名为 Virtual Filesystem Switch 的核心功能去读写 filesystem 。 也就是说,整个 Linux 认识的 filesystem 其实都是
VFS 在进行管理,使用者并不需要知道每个 partition 上的 filesystem 是什么,VFS 会自动为我们做好读写操作。
■ 挂载点的意义 (mount point)
-----------------------------------------------------------------------------------------------------------------------------------------
每个文件系统都有独立的 inode / block / superblock 等信息,这个文件系统要能够链接到目录树上才能被我们使用。将文件系统与目录树结合的操作称为
挂载 (mount)。挂载点一定是目录,该目录是进入该文件系统的入口。因此,并不是有任何文件系统都能使用,必须挂载到目录树的某个目录之后,才能够使
用该文件系统。
2. 文件系统简单操作
---------------------------------------------------------------------------------------------------------------------------------------------
■ df :列出文件系统磁盘空间使用情况
-----------------------------------------------------------------------------------------------------------------------------------------
用法:
[root@www ~]# df [-ahikHTm] [目录或文件名]
选项与参数:
-a :列出所有的文件系统,包括系统特有的 /proc 等文件系统;
-k :以 KBytes 容量显示各文件系统;
-m :以 MBytes 癿容量显示各文件系统;
-h :以人们易读的 GBytes, MBytes, KBytes 等格式自行显示;
-H :以 M=1000K 取代 M=1024K 的进位方式;
-T :连同该 partition 的 filesystem 名称 (例如 ext4) 也列出;
-i :不用硬盘容量,而以 inode 的数量来显示
■ du :评估文件系统磁盘使用量(常用于估算目录所占容量)
-----------------------------------------------------------------------------------------------------------------------------------------
用法:
[root@www ~]# du [-ahskm] 文件或目录的名称
选项与参数:
-a :列出所有的文件与目录容量,默认仅统计目录下的文件量。
-h :以人们易读的容量格式 (G/M) 显示;
-s :列出总量,而不列出各个目录占用的容量;
-S :不包括子目录下的总计,与 -s 有点差别。
-k :以 KBytes 列出容量显示;
-m :以 MBytes 列出容量显示;
■ 硬链接与符号链接: ln
-----------------------------------------------------------------------------------------------------------------------------------------
□ Hard Link (硬链接)
-----------------------------------------------------------------------------------------------------------------------------------------
硬链接是某个目录下一个文件名链接到某个 inode 号码的关联记录。
硬链接的限制:
● 不能跨文件系统(分区)
● 不能 link 目录
□ Symbolic Link (符号链接)
-----------------------------------------------------------------------------------------------------------------------------------------
符号链接是建立的一个独立文件,而这个文件的内容指向它链接的那个文件名。
用法:
[root@www ~]# ln [-sf] 源文件 目标文件
选项与参数:
-s :如果不加任何参数就进行连结,那就是hard link,至亍 -s 就是symbolic link
-f :如果目标文件存在,就自动将目标文件移除后再建立
3. 硬盘分区、格式化、校验与挂载
---------------------------------------------------------------------------------------------------------------------------------------------
如果要在系统里新增一块硬盘,需要做如下工作:
① 对磁盘划分,以建立可用的分区 (partition)
② 对分区进行格式化( format ), 以建立系统可用的 filesystem
③ 对刚刚建立好的 filesystem 进行检验
④ 在 Linux 系统上,需要建立挂载点 ( 即是目录 ),幵将其挂载
3.1 磁盘分区: fdisk,partprobe
-----------------------------------------------------------------------------------------------------------------------------------------
用法:
fdisk [-l] 设备名称
选项与参数:
设备名称:磁盘设备文件名,不是分区名称,例如:/dev/sda , 不要加分区数字。
-l:输出后面连接的设备名称的分区内容。如果仅有 fdisk -l , 后面没有设备名称,则将整个系统内能够搜到的设备的分区都列出来。
没有该选项,则进入 fdisk 命令环境,对后面的 “设备名称” 进行分区管理操作。
范例:列出磁盘 /dev/sdc 的分区表
-------------------------------------------------------------------------------------------------------------------------------------
sudo fdisk -l /dev/sdc
■ 对 /dev/sdc 磁盘进行分区管理:
-----------------------------------------------------------------------------------------------------------------------------------------
sudo fdisk /dev/sdc
进入 fdisk 命令环境,输入 m 获取帮助:
命令(输入 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 <==不存储退出 fdisk 程序
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 <==将操作写入分区表并退出 fdisk
x extra functionality (experts only) <==高级操作(仅专家)
● 删除分区
-------------------------------------------------------------------------------------------------------------------------------------
步骤:
① sudo fdisk /dev/sdc :进入 fdisk 环境;
② p : 看下分区表;
③ d : 删除命令,选择分区号码;
④ w (or) q :按 w 存储修改并退出 fdisk ; 按 q 取消修改并退出 fdisk 。
● 创建分区
-------------------------------------------------------------------------------------------------------------------------------------
创建分区有多种情况,创建 Primary / Extended / Logical 的显示过程不同。
一个磁盘最多只能有一个 Extended 扩展分区。
命令 n : 创建一个新分区,选择分区类型:磁盘中还没有扩展分区,因此没有逻辑分区的选项
p primary (0 primary, 0 extended, 4 free)
e extended
选择 p : 创建 primary 主分区
选择 e : 创建 extended 扩展分区
选择 p , 创建主分区,显示分区号选项
分区号 (1-4,默认 1): 回车,选择默认值 1
起始 扇区 (2048-1000215215,默认为 2048): 选择起始扇区,回车选择默认值
Last 扇区, +扇区 or +size{K,M,G} (2048-1000215215,默认为 1000215215): 选择结束扇区,或 +size{K,M,G} 分区尺寸,由 fdisk
计算结束扇区。
选择 e , 创建扩展分区,显示分区号选项
分区号 (1-4,默认 2): 回车,选择默认值 2
起始 扇区 (2048-1000215215,默认为 2048): 选择起始扇区,回车选择默认值
Last 扇区, +扇区 or +size{K,M,G} (2048-1000215215,默认为 1000215215): 选择结束扇区,或 +size{K,M,G} 分区尺寸,由 fdisk
计算结束扇区。
再次选择命令 n : 因磁盘上已有 extended 扩展分区,因此出现逻辑分区选项
Partition type:
p primary (0 primary, 1 extended, 3 free)
l logical (numbered from 5)
选择 l , 创建逻辑分区,分区号从 5 开始。
分区有 primary/extended/logical 的类型,一般来说,创建分区会有几种情况:
□ 1~4 号尚有剩余,且磁盘没有 extended 扩展分区:此时会出现选择 Primary / Extended 分区类型,且可以选择 1~4之间的号码;
□ 1~4 号尚有剩余,且系统中已有 extended 扩展分区,此时会出现选择 Primary / Logical 分区类型,若选择 p 则可以选择 1~4之间的号码;
选择 l(L 的小写),则不需要指定号码,系统会自动为逻辑分区选择分区号。
□ 1~4 号没有剩余,且系统中已有 extended 扩展分区:系统不会出现分区类型选择,直接选择 Logical 逻辑分区,然后进行起始扇区选择步骤。
分区修改完毕后,内核可能无法立刻获取新的分区信息,可以 reboot 处理,也可以通过 partprobe 指令。 partprobe 指令只是通知内核重新读取分区表
信息,不会在屏幕上出现任何信息,这样就不需要 reboot 系统了。
3.2 分区格式化: mkfs
-----------------------------------------------------------------------------------------------------------------------------------------
用法:
mkfs [-t 文件系统格式] 设备
mkfs [选项] [-t <类型>] [文件系统选项] <设备> [<大小>]
选项与参数:
-t :后接文件系统格式,如:xfs, ext4, ext3, ext2, vfat 等(只有系统支持才会生效)
设备: 指分区的设备文件绝对路径,如:/dev/sdc1
范例:使用 xfs 格式化分区 /dev/sdc1
mkfs -t xfs /dev/sdc1
执行下面指令:
-------------------------------------------------------------------------------------------------------------------------------------
[root@www ~]# mkfs[tab][tab] <==按两个[tab]
结果:
mkfs mkfs.cramfs mkfs.ext3 mkfs.fat mkfs.msdos mkfs.xfs
mkfs.btrfs mkfs.ext2 mkfs.ext4 mkfs.minix mkfs.vfat
说明: mkfs 实际上是一个综合指令,执行时会根据不同的文件系统格式类型选择对应的格式化工具执行格式化任务。例如 mkfs -t xfs, 实际执行的是
mkfs.xfs 工具命令。
vfat 可用于 Windows/Linux 共享的 U 盘或移动硬盘文件格式。
■ ext4 与 xfs
----------------------------------------------------------------------------------------------------------------------------------------
ext4是第四代扩展文件系统(英语:Fourth EXtended filesystem,缩写为ext4)是linux系统下的日志文件系统,是ext3文件系统的后继版本。ext3目前
只支持32000个子目录,而ext4取消了这一限制,理论上支持无限数量的子目录。
Ext4的文件系统容量达到1EB,而文件容量则达到16TB,这是一个非常大的数字了。对一般的台式机和服务器而言,这可能并不重要,但对于大型磁盘阵列
的用户而言,这就非常重要了。
xfs是一种非常优秀的日志文件系统,它是SGI公司设计的。xfs被称为业界最先进的、最具可升级性的文件系统技术。
XFS是一个64位文件系统,最大支持8EB减1字节的单个文件系统,实际部署时取决于宿主操作系统的最大块限制。对于一个32位Linux系统,文件和文件系统
的大小会被限制在16TB。
xfs在很多方面确实做的比ext4好,ext4受限制于磁盘结构和兼容问题,可扩展性和scalability确实不如xfs,另外xfs经过很多年发展,各种锁的细化做的
也比较好。
红帽官方版本已经升级到7.2,该版本的标准文件系统已经由EXT4升级到XFS。
Linux 7.2 xfs和ext4性能测试
----------------------------------------------------------------------------------------------------------------------------------------
结论: XFS的顺序写比EXT4快一倍。
XFS的顺序读比EXT4快20M/S
EXT4的随机写比XFS快0.7M/S
EXT4的随机读比XFS的随机读快4M/S
■ mke2fs ———— 更详细的文件系统格式化工具 (create an ext2/ext3/ext4 filesystem)
-----------------------------------------------------------------------------------------------------------------------------------------
用法:
mke2fs [-b block大小] [-i block大小] [-L 标头] [-cj] [-t fs-type] 设备
选项与参数:
-b :可以设置每个 block 的大小,目前支持 1024, 2048, 4096 bytes 三种;
-i :一个 inode 分配多少容量
-c :检查磁盘错误,仅下达一次 -c 时,会进行快速读取测试; 如果下达两次 -c -c 的话,会测试读写(read-write),会很慢
-L :后面可以接标签名称 (Label),这个 label 是有用的,e2label 指令介绍会谈到
-j :本来 mke2fs 是 EXT2 ,加上 -j 后,会主动加入 journal 而成为 EXT3。
-t : Specify the filesystem type (i.e., ext2, ext3, ext4, etc.) that is to be created.
mke2fs 选项和细节非常多,因此通常使用 mkfs 。 mkfs 的 [文件系统选项] 可以指定 mke2fs 的文件系统细节设置。
3.3 磁盘检查: fsck, badblocks
-----------------------------------------------------------------------------------------------------------------------------------------
■ fsck 通常用来检查并适当修复一个或多个 Linux 文件系统.
-----------------------------------------------------------------------------------------------------------------------------------------
用法:
fsck [-t 文件系统] [-ACay] [filesys ... ] [--] [ fs-specific-options ]
选项与参数:
-t :如同 mkfs 一样,fsck 也是个综合软件,因此同样需要指定文件系统。 不过由于现在的 Linux 很智能,它会通过 superblock 自动判断文件系统,
因此通常可以省略该选项。
-A :根据 /etc/fstab 的内容,将需要的设备扫瞄一次。通常开机过程会执行此命令。
-a :自动修复检查到的有问题的扇区,所以不用一直按 y 键。
-y :与 -a 类似,但是某些 filesystem 仅支持 -y 这个参数。
-C :可以在检查过程当中,使用一个直方图来显示当前进度。
filesys ... : 可以是一个设备名(例如: /dev/hdc1, /dev/sdb2), 一个挂载点(例如: /, /usr, /home), 或一个ext2文件系统的磁盘标签, 也可以是UUID
指定符(例如: UUID=8868abf6-88c5-4a83-98b8-bfc24057f7bd 或 LABEL=root). 通常,fsck 会试着以并行的方式同时在不同的物理磁盘上运行文件系统
检查,这样可以减少对所有文件系统进行检查的时间。
如果没有在命令行指定文件系统,并且没有指定 -A 选项,fsck 将默认顺序地检查 /etc/fstab 中登记的文件系统。这和使用 -As 选项是相同的。
执行:
-----------------------------------------------------------------------------------------------------------------------------------------
[root@www ~]# fsck[tab][tab] <==按两个[tab]
结果:
fsck fsck.cramfs fsck.ext3 fsck.fat fsck.msdos fsck.xfs
fsck.btrfs fsck.ext2 fsck.ext4 fsck.minix fsck.vfat
说明:
实际上,fsck 只是 Linux 中不同的文件系统检查器(fsck.fstype)的一个前端。首先,它在 /sbin 中搜索特定文件系统的检查器,然后在 /etc/fs 和
/etc 中搜索,最后在 PATH 环境变量中列出的路径中搜索。
执行 fsck 时,被检查 partition 分区不可挂载到系统上,亦即需要在卸载状态下。
■ badblocks - 用来在设备(通常是磁盘分区)中检测坏区块
-----------------------------------------------------------------------------------------------------------------------------------------
用法:
badblocks -[svw] 设备名称
选项与参数:
-s :通过输出正在被检测的区块的号码以表示检测进程。
-v :混杂模式检测。
-w :使用写入方式来测试,建议不要使用此参数,尤其是待检查的设备已有文件时。
badblocks 是用来检查硬盘或软盘扇区有没有坏轨指令。由于这个指令可以通过 “mke2fs -c 设备文件名” 在格式化时处理磁盘表面的读写测试,因此目前大多
不使用这个命令了。
3.4 磁盘挂载与卸载
-----------------------------------------------------------------------------------------------------------------------------------------
挂载点是目录,而这个目录是进入磁盘分区(其实是文件系统)的入口。要进行挂载前,最好先确定几件事:
● 单一文件系统不应被重复挂载到不同的挂载点上(目录)
● 单一目录不要重复挂载多个文件系统(分区)
● 作为挂载点的目录,应该是空目录
要将文件系统挂载到 Linux 系统上,就要使用 mount 命令。
■ mount - mount a filesystem
-----------------------------------------------------------------------------------------------------------------------------------------
用法:
mount [-t 文件系统] [-L Label名] [-o 额外选顷] [-n] 设备文件名 挂载点
选项与参数:
-a, --all :根据配置文件 /etc/fstab 将所有未挂载的磁盘都挂载上来(Mount all filesystems (of the given types) mentioned in fstab)
-l, --show-labels :单纯输入 mount 会显示当前挂载的信息。加上 -l 可增列 Label 名称
-t :与 mkfs 选项非常类似,可以加上文件系统类型来指定欲挂载的文件系统类型。常见的 Linux 支持类型有:ext2, ext3, ext4, xfs, vfat, reiserfs,
iso9660(光盘格式), nfs, cifs, smbfs(此三种为网络文件系统类型)
-n :默认情况下,系统会将实际挂载信息实时写入 /etc/mtab 中,便于其他程序运行。但在某些情况下(例如单人维护模式)为了避免问题,会刻意不写入。
此时就得要使用这个 -n 选顷了。
-L :系统除了利用设备文件名 (例如 /dev/sdc1) 之外,还可以使用文件系统的标签名称 (Label)来进行挂载。最好为文件系统取一个独一无二的名称。
-o :后面可以接一些挂载时的额外参数。例如帐号、密码、读写权限等:
ro, rw: 挂载文件系统成为只读(ro) 或可写(rw)。
async, sync: 此文件系统是否使用同步写入 (sync) 或异步 (async) 的内存机制,默认为 async。
auto, noauto: 是否允许此 partition 被 mount -a 自动挂载(auto)。
dev, nodev: 是否允许此 partition 上可建立设备文件,dev 为允许。
suid, nosuid: 是否允许此 partition 含有 suid/sgid 文件格式
exec, noexec: 是否允许此 partition 上含有可执行 binary 文件
user, nouser: 是否允许此 partition 任何使用者可以执行 mount 。一般来说,mount 仅有 root 可以执行,但使用 user 参数,则可以使一般 user
也能够对此 partition 执行 mount 操作。
defaults: 默认值为:rw, suid, dev, exec, auto, nouser, and async
remount: 重新挂载,这在系统出错,或重新更新参数时很有用。
■ 挂载 Ext2/Ext3/Ext4/xfs 文件系统
-----------------------------------------------------------------------------------------------------------------------------------------
mount 设备文件名 挂载点
范例:
mkdir /mnt/sdc1
mount /dev/sdc1 /mnt/sdc1
利用 [mount 设备文件名 挂载点] 就能够顺利挂载。
■ 挂载 CD 或 DVD 光盘
-----------------------------------------------------------------------------------------------------------------------------------------
范例:
mkdir /media/cdrom
mount -t iso9660 /dev/cdrom /media/cdrom
mount /dev/cdrom /media/cdrom
可以指定 -t iso9660 这个光盘格式来挂载,也可以让系统自己去检测挂载,所以上述指令只执行一个就可以了。
■ 重新挂载根目录与挂载不特定目录
-----------------------------------------------------------------------------------------------------------------------------------------
整个目录树最重要的地方就是根目录,所以根目录根本就不能卸载。但问题是,如果挂载参数发生变化,或者根目录出现只读状态,如何重新挂载呢。最可能
的处理方式就是重新启动(reboot) 。不过也可以这样做:
范例:将 / 重新挂载,并加入参数 rw 和 auto
[root@www ~]# mount -o remount,rw,auto /
另外,可以利用 mount 将某个目录挂载到另一目录。这并不是挂载文件系统,而是额外挂载某个目录的方法。虽然也可以通过符号链接(symbolic link) 来
实现,不过对于不支持符号链接的程序中,还是要通过这样的方法才行。
范例:将 /home 这个目录暂时挂载到 /mnt/home 下
[root@www ~]# mkdir /mnt/home
[root@www ~]# mount --bind /home /mnt/home
[root@www ~]# ls -lid /home/ /mnt/home
2 drwxr-xr-x 6 root root 4096 Sep 29 02:21 /home/
2 drwxr-xr-x 6 root root 4096 Sep 29 02:21 /mnt/home
实际上,两者链接到同一个 inode。通过 mount --bind 功能,可以将某个目录挂载到其他目录,而不是整个文件系统。所以进入 /mnt/home 就是进入/home
■ umount - 卸载文件系统
-----------------------------------------------------------------------------------------------------------------------------------------
umount 可以卸载当前挂载在文件层次目录中的文件系统。文件系统形式可以是以它所在的目录的形式指定,也可以是以它所在的特殊设备的形式来指定。
请注意当文件系统正处于使用状态时,不能进行卸载操作,必须等工作完成后才能进行卸除。例如,如果在当前文件系统中有打开的文件或某些进程
正工作在该文件系统的某个目录下时,或者是它上面的一个交换文件正在使用。涉及的进程甚至可以是 umount 本身 - 它打开 libc,而随后 libc
可能会打开本地文件.
用法:
umount [-fn] 设备文件名或挂载点
选项与参数:
-f :强制卸除,可用在类似网络文件系统 (NFS) 无法读取情况下;
-n :卸载后不将相应信息写入 /etc/mtab 文件。
范例:将之前挂载的文件系统卸载
umount /dev/sdc1 <==用设备文件名来卸载
umount /mnt/sdc1 <==用挂载点来卸载
■ 使用 Label name 进行挂载
-----------------------------------------------------------------------------------------------------------------------------------------
除了文件系统的设备文件名外,还可以使用文件系统标签(label) 来挂载。
用法:
mount -L "dev_logical" /mnt/sdc1
■ e2label - Change the label on an ext2/ext3/ext4 filesystem
-----------------------------------------------------------------------------------------------------------------------------------------
用法:
e2label device [ new-label ]
此工具只对 ext2/ext3/ext4 文件系统起作用,对 xfs 等其他文件系统无效。
4. 设置开机挂载
---------------------------------------------------------------------------------------------------------------------------------------------
4.1 开机挂载 /etc/fstab 及 /etc/mtab
-----------------------------------------------------------------------------------------------------------------------------------------
系统挂载的一些限制:
● 根目录 / 是必须挂载的,而且一定要先于其他挂载点被挂载进来
● 其他挂载点必须为已建立的目录,可以任意指定,但一定要遵守必要的系统目录架构原则
● 所有挂载点在同一时间之内,只能挂载一次
● 所有的分区在同一时间内,只能挂载一次
● 若要进行卸载,必须先将工作目录移到挂载点(及其子目录)之外。
查看 /etc/fstab
[root@online ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Wed Apr 18 13:13:09 2018
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=d5071931-49ca-4697-93ae-670c257271e4 /boot xfs defaults 0 0
/dev/mapper/centos-home /home xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
其实 /etc/fstab (filesystem table) 就是将我们利用 mount 命令进行挂载时,将所有的选项与参数写入到这个文件中就可以了。除此之外,/etc/fstab
还加入了 dump 这个备份的命令支持。与开机时是否进行文件系统检验 fsck 等命令有关。
这个文件的内容共用六个字段,这六个字段非常重要,各个字段详细数据如下:
● 第一列:文件系统设备文件名或设备 Label
● 第二列:挂载点(mount point), 一定是目录
● 第三列:文件系统类型
● 第四列:文件系统参数
● 第五列:能否被 dump 备份命令作用:0 代表不要做 dump 备份, 1 代表要每天进行 dump 操作。 2 也代表其他不定日期的 dump 备份操作,通常
这个值不是 0 就是 1
● 第六列:是否以 fsck 检验扇区:开机过程中,系统默认会以 fsck 检验文件系统是否完整(clean)。不过,某些 filesystem 是不需要检验的,例如
内存交换空间 (swap) ,或者是特殊文件系统例如 /proc 与 /sys 等等。所以,在这个字段中,我们可以设置是否要 fsck 检验该 filesystem 。
0 是不要检验, 1 表示最早检验(一般只有根目录会设置为 1), 2 也是要检验,不过 1 会比较早被检验。 一般来说,根目录设置为 1 ,其
他要检验的 filesystem 都设置为 2 就好了。
范例:
[root@www ~]# nano /etc/fstab
/dev/sdc1 /mnt/sdc1 xfs defaults 1 2
最后测试一下刚刚写入 /etc/fstab 的语法是否有错误。这点很重要,因为这个文件如果写错了,则 Linux 很可能将无法顺利开机,所以务必要测试。
[root@www ~]# mount -a
[root@www ~]# df
最终看到 /dev/sdc1 被挂载的信息才是成功挂载了,而且以后每次开机都会顺利地将此文件系统挂载起来。
/etc/fstab 是开机时的配置文件,实际的文件系统挂载是记录到 /etc/mtab 与 /proc/mounts 这两个文件中的。每次在改变 filesystem 挂载时,也会同时
改变这个两个文件。但是,万一在 /etc/fstab 中输入错误,导致无法顺利开机成功而进入单用户维护模式,那是 / 是 readonly 状态,当然无法修改
/etc/fstab, 也无法更新 /etc/mtab, 可以使用下面的方法:
[root@www ~]# mount -n -o remount,rw /
重新以读写形式挂载根目录 /
4.2 特殊设备 loop 挂载(镜像文件不刻录就挂载使用)
-----------------------------------------------------------------------------------------------------------------------------------------
■ 挂载光盘 /DVD 镜像文件
-----------------------------------------------------------------------------------------------------------------------------------------
想象以下,如果下载了 Linux 或者其他所需光盘 DVD 的镜像文件,难道一定要刻录成光盘才能够使用里面的数据吗?我们可以通过 loop 设备挂载。
范例:
[root@www ~]# ll -h /root/centos5.2_x86_64.iso -rw-r--r-- 1 root root 4.3G Oct 27 17:34 /root/centos5.2_x86_64.iso
# 这个文件就是镜像文件。
# 执行挂载
[root@www ~]# mkdir /mnt/centos_dvd
[root@www ~]# mount -o loop /root/centos5.2_x86_64.iso /mnt/centos_dvd
[root@www ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/root/centos5.2_x86_64.iso 4493152 4493152 0 100% /mnt/centos_dvd
# 就是这个项目 .iso 映象文件内的所有数据可以在 /mnt/centos_dvd 看到。
[root@www ~]# ll /mnt/centos_dvd
[root@www ~]# umount /mnt/centos_dvd/
# 测试完毕,卸载镜像。
如此一来不需要将镜像文件刻录成光盘就能读取内部数据。
5. 利用 GNU parted 进行分区
---------------------------------------------------------------------------------------------------------------------------------------------
fdisk 无法支持高于 2TB 以上的分区,此时就需要 parted 工具了。
parted - a partition manipulation program
用法:
parted [options] [device [command [options...]...]]
列出分区信息:
[root@online ~]# parted /dev/sdc print
Model: ATA Galaxy GX0500MT1 (scsi)
Disk /dev/sdc: 512GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system 标志
1 1049kB 512GB 512GB primary xfs
■ 进入 parted 命令环境:
-----------------------------------------------------------------------------------------------------------------------------------------
[root@online ~]# parted /dev/sdc
输入 help 查看帮助信息:
(parted) help
align-check TYPE N check partition N for TYPE(min|opt) alignment
help [COMMAND] print general help, or help on COMMAND
mklabel,mktable LABEL-TYPE create a new disklabel (partition table)
mkpart PART-TYPE [FS-TYPE] START END make a partition
name NUMBER NAME name partition NUMBER as NAME
print [devices|free|list,all|NUMBER] display the partition table, available devices, free space, all found partitions, or a
particular partition
quit exit program
rescue START END rescue a lost partition near START and END
rm NUMBER delete partition NUMBER
select DEVICE choose the device to edit
disk_set FLAG STATE change the FLAG on selected device
disk_toggle [FLAG] toggle the state of FLAG on selected device
set NUMBER FLAG STATE change the FLAG on partition NUMBER
toggle [NUMBER [FLAG]] toggle the state of FLAG on partition NUMBER
unit UNIT set the default unit to UNIT
version display the version number and copyright information of GNU Parted
(parted)
PART-TYPE:分区表类型,有primary, extended, logical 类型
■ parted 基本操作:
-----------------------------------------------------------------------------------------------------------------------------------------
● 选择/dev/sdb硬盘进行操作:
(parted) select /dev/sdd
使用 /dev/sdd
● 查看当前磁盘分区情况:
● 删除分区(分区号 1):
rm 1
● 将MBR磁盘格式化为GPT:
mklabel gpt
■ parted命令为大于2T硬盘分区
-----------------------------------------------------------------------------------------------------------------------------------------
一般来说我们对磁盘分区都是用fdisk命令,但是对于硬盘容量大于2T时,这个命令就不管用了,因为MBR分区表只支持2T磁盘;所以大于2T的磁盘必须使用
GPT分区表,这时我们就需要用到parted命令。
# parted /dev/sdb # 使用parted来对GPT磁盘操作,进入交互式模式
(parted) mklabel gpt # 将MBR磁盘格式化为GPT
(parted) mkpart primary xfs 0% 100% # 将所有容量分为一个主分区
(parted) p #打印当前分区
(parted) q #退出
■ 参考:
-----------------------------------------------------------------------------------------------------------------------------------------
http://www.gnu.org/software/parted/
6. Centos 7 挂载 NTFS 格式移动硬盘
---------------------------------------------------------------------------------------------------------------------------------------------
需要一个NTFS-3G工具
■ 简单方法
-----------------------------------------------------------------------------------------------------------------------------------------
① 添加新仓库源
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum update
② 安装 ntfs-3g
yum install ntfs-3g
OK.
■ 源码安装
-----------------------------------------------------------------------------------------------------------------------------------------
下载源码:git clone https://git.code.sf.net/p/ntfs-3g/ntfs-3g ntfs-3g-ntfs-3g
./configure && make && make install
■ 挂载
-----------------------------------------------------------------------------------------------------------------------------------------
mount -t ntfs-3g /dev/sda2 /mnt/Windows
开机挂载:
vi /etc/fstab
添加:
/dev/sda2 /mnt/windows ntfs-3g defaults 0 0