Linux5.0 磁盘与文件系统管理


Linux磁盘与文件系统管理

XFS文件系统简介

从CentOS7开始,默认的文件系统从EXT4变成XFS文件系统,为什么CentOS7要舍弃对Linux支持度最完整的EXT系列而改用XFS?

  • EXT系列支持度最广,但是格式化很慢

    EXT文件系统系列对于文件格式化的处理方面,采用的是预先规划处所有的inode、区块、元数据等数据,未来系统可以直接使用,不需要再进行动态配置的做法,在早期磁盘容量还不大的情况下没什么问题,但随着磁盘容量越来越大,连传统的MBR分区都已经被GPT分区所取代,当我们的TB以上等级的传统EXT系列文件系统在格式化的时候,光是系统要预先分配inode于区块都要消耗很多时间

XFS文件系统的配置

XFS基本上就是一个日志式文件系统,而CentOS7拿他当默认的文件系统,原因就是,在最早之前XFS就是被开发来用于高容量磁盘以及高性能文件系统来用的,因此相当适合现在的系统环境,此外几乎所有EXT4文件系统有的功能,XFS都可以具备,

XFS文件系统在数据上的分布

  • 数据区(data section
    • 包括inode、数据区块、超级区块等数据都放在这个区块
    • 分为多个存储区群组(allocation groups)来分别放置文件系统所需要的数据,每个存储区群组都包含了
      • 整个文件系统的超级区块
      • 剩余空间的管理机制
      • inode的分配和追踪
  • 文件系统活动登陆区(log section
    • 主要用作记录文件系统的变化,文件的变化会在这里记录下来,知道该变化完整地写入到数据区后,该条记录才会被结束
    • 在该区域中,可以指定外部的磁盘作为XFS文件系统的日志区块,例如:可以将SSD磁盘作为XFS的登陆区,当系统需要进行任何活动时就可以更快速的进行工作。
  • 实时运行区(realtime section
    • 当有文件需要被建立时,XFS会在这个区段里面找到一个到数个的extent区块,将文件放置在这个区块内,等到分配完毕后再写入到data section的inode与区块中

XFS文件系统的描述数据观察

  • 找出系统在/boot这个挂载点下面的文件系统的超级区块记录

    image-20240416201648433

    • isizeinode容量,每个有512B这么大
    • agcount:存储区群组(allocation group)的个数,共有4个
    • agsize:是指每个存储区群组具有65536个区块,配合bsize区块设置为4K,因此整个文件系统的容量就是4*35536*4K这么大
    • sectsz:逻辑扇区(sector)的容量设置为512B
    • bsize:区块容量,每个区块为4K,共有262144个区块在这个文件系统内
    • sunitswidth:与磁盘阵列的stripe相关性较高,
    • internal:该登陆区的位置在文件系统内,而不是外部设备的意思,且占用了4K*2560个区块,总共约10M的容量
    • realtime:里面的extentsize为4K,不过目前没有使用

文件系统的简单操作

磁盘与目录的容量

  • df:列出文件系统的整体磁盘使用量
  • du:查看文件系统的磁盘使用量(常用在查看目录所占磁盘空间)

df

[feliks@localhost ~]$ df [-ahikHTm] [目录或文件名]
选项与参数:
-a:列出所有的文件系统,包括系统特有的/proc等文件系统
-k:以KBytes的容量显示各文件系统
-m:以MBytes的容量显示各文件系统
-h:以人们较易阅读的GBytes、MBytes、KBytes等格式自行显示
————————————————————————————————————————————————————
-H:以 M=1000K 替换 M=1024K 的进位方式
-T:连同该硬盘分区的文件系统名称(例如XFS)也列出
-i:不用磁盘容量,而以inode的数量来显示
————————————————————————————————————————————————————
[feliks@localhost ~]$ df
文件系统                   1K-块    已用    可用 已用% 挂载点
devtmpfs                  480684       0  480684    0% /dev
tmpfs                     497816       0  497816    0% /dev/shm
tmpfs                     497816    8800  489016    2% /run
tmpfs                     497816       0  497816    0% /sys/fs/cgroup
/dev/mapper/centos-root 10475520 4832244 5643276   47% /
/dev/sda2                1038336  177544  860792   18% /boot
/dev/mapper/centos-home  5232640   38940 5193700    1% /home
tmpfs                      99564      52   99512    1% /run/user/1000
tmpfs                      99564       0   99564    0% /run/user/0
# 在Linux下面如果df没有加任何选项,那么默认会将系统内所有的(不含特殊的内存内的文件系统与swap)
# 都以 1KBytes 的容量来列出来,至于那个/dev/shm是与内存有关的挂载,暂时不予理会
  • Filesystem:代表该文件系统是在哪个硬盘分区,所以列出设备名称
  • 1K-块:1k-blocks,说明下面的数字单位是1KB,可利用 -h 或 -m 来改变容量
  • 已用:Used,使用掉的磁盘空间
  • 可用:Available,剩下的磁盘空间
  • 已用%:Use%,磁盘的使用率,如果使用率高达90%以上,最好注意一下,免得容量不足造成系统问题
  • 挂载点:Mounted on,就是磁盘的挂载目录

将容量结果以易读的格式显示出来

[feliks@localhost ~]$ df -h
文件系统                 容量  已用  可用 已用% 挂载点
devtmpfs                 470M     0  470M    0% /dev
tmpfs                    487M     0  487M    0% /dev/shm
tmpfs                    487M  8.6M  478M    2% /run
tmpfs                    487M     0  487M    0% /sys/fs/cgroup
/dev/mapper/centos-root   10G  4.7G  5.4G   47% /
/dev/sda2               1014M  174M  841M   18% /boot
/dev/mapper/centos-home  5.0G   39M  5.0G    1% /home
tmpfs                     98M   52K   98M    1% /run/user/1000
tmpfs                     98M     0   98M    0% /run/user/0

将系统内的所有特殊文件格式及名称都列出来

[feliks@localhost ~]$ df -aT
文件系统                类型               1K-块    已用    可用 已用% 挂载点
sysfs                   sysfs                  0       0       0     - /sys
proc                    proc                   0       0       0     - /proc
devtmpfs                devtmpfs          480684       0  480684    0% /dev
securityfs              securityfs             0       0       0     - /sys/kernel/security
tmpfs                   tmpfs             497816       0  497816    0% /dev/shm
devpts                  devpts                 0       0       0     - /dev/pts
tmpfs                   tmpfs             497816    8800  489016    2% /run
tmpfs                   tmpfs             497816       0  497816    0% /sys/fs/cgroup
cgroup                  cgroup                 0       0       0     - /sys/fs/cgroup/systemd
pstore                  pstore                 0       0       0     - /sys/fs/pstore
cgroup                  cgroup                 0       0       0     - /sys/fs/cgroup/net_cls,net_prio
cgroup                  cgroup                 0       0       0     - /sys/fs/cgroup/freezer
cgroup                  cgroup                 0       0       0     - /sys/fs/cgroup/memory
cgroup                  cgroup                 0       0       0     - /sys/fs/cgroup/cpu,cpuacct
cgroup                  cgroup                 0       0       0     - /sys/fs/cgroup/devices
cgroup                  cgroup                 0       0       0     - /sys/fs/cgroup/cpuset
cgroup                  cgroup                 0       0       0     - /sys/fs/cgroup/hugetlb
cgroup                  cgroup                 0       0       0     - /sys/fs/cgroup/perf_event
cgroup                  cgroup                 0       0       0     - /sys/fs/cgroup/pids
cgroup                  cgroup                 0       0       0     - /sys/fs/cgroup/blkio
configfs                configfs               0       0       0     - /sys/kernel/config
/dev/mapper/centos-root xfs             10475520 4832252 5643268   47% /
selinuxfs               selinuxfs              0       0       0     - /sys/fs/selinux
systemd-1               autofs                 0       0       0     - /proc/sys/fs/binfmt_misc
debugfs                 debugfs                0       0       0     - /sys/kernel/debug
mqueue                  mqueue                 0       0       0     - /dev/mqueue
hugetlbfs               hugetlbfs              0       0       0     - /dev/hugepages
fusectl                 fusectl                0       0       0     - /sys/fs/fuse/connections
/dev/sda2               xfs              1038336  177544  860792   18% /boot
/dev/mapper/centos-home xfs              5232640   38940 5193700    1% /home
sunrpc                  rpc_pipefs             0       0       0     - /var/lib/nfs/rpc_pipefs
tmpfs                   tmpfs              99564      52   99512    1% /run/user/1000
gvfsd-fuse              fuse.gvfsd-fuse        0       0       0     - /run/user/1000/gvfs
tmpfs                   tmpfs              99564       0   99564    0% /run/user/0

将/etc下面的可用的磁盘容量以易读的容量格式显示

[feliks@localhost ~]$ df -h /etc
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   10G  4.7G  5.4G   47% /

将目前各个硬盘分区可用的inode数量列出

[feliks@localhost ~]$ df -ih
文件系统                Inode 已用(I) 可用(I) 已用(I)% 挂载点
devtmpfs                 118K     402    117K       1% /dev
tmpfs                    122K       1    122K       1% /dev/shm
tmpfs                    122K    1001    121K       1% /run
tmpfs                    122K      16    122K       1% /sys/fs/cgroup
/dev/mapper/centos-root  5.0M    128K    4.9M       3% /
/dev/sda2                512K     340    512K       1% /boot
/dev/mapper/centos-home  2.5M     183    2.5M       1% /home
tmpfs                    122K      25    122K       1% /run/user/1000
tmpfs                    122K       1    122K       1% /run/user/0

Considerations

  • 由于df主要读取的数据几乎都是针对一整个文件系统,因此读取的范围主要是在超级区块内的信息,所以这个命令显示结果非常快,在显示过程中要留意一下根目录(/)的剩余容量,因为所有的数据都是由根目录衍生出来的,如果其剩余容量剩下0时问题就会很大了
  • 使用-a参数时,/proc挂载点里面的东西都是0是因为,/proc里的东西都是Linux系统所需要加载的系统数据,而且是挂载在内存当中,所以当然没有占用任何磁盘空间
  • /dev/shm:是利用内存虚拟出来的磁盘空间,通常是总物理内存的一半

du

[feliks@localhost ~]$ du [-ahskm] 文件或目录名称
选项与参数:
-a:列出所有的文件与目录容量,因为默认仅统计目录下面的文件量
-h:以人们较易阅读的容量格式(G/M)显示
-s:仅列出总量,而不列出每个各别的目录占用容量
————————————————————————————————————————————————————————
-S:不包括子目录下的总计
-k:以KBytes列出容量显示
-m:以MBytes列出容量显示

列出当前目录下的所有文件容量

[feliks@localhost ~]$ du
0	./.mozilla/extensions
0	./.mozilla/plugins
0	./.mozilla
4	./.cache/gdm
4	./.cache/imsettings
0	./.cache/libgweather
0	./.cache/evolution/addressbook/trash
0	./.cache/evolution/addressbook
0	./.cache/evolution/calendar/trash
0	./.cache/evolution/calendar
0	./.cache/evolution/mail/trash
0	./.cache/evolution/mail
0	./.cache/evolution/memos/trash
0	./.cache/evolution/memos
0	./.cache/evolution/sources/trash
0	./.cache/evolution/sources
0	./.cache/evolution/tasks/trash
0	./.cache/evolution/tasks
0	./.cache/evolution
0	./.cache/gnome-shell
3288	./.cache/tracker
4	./.cache/abrt
488	./.cache/gstreamer-1.0
0	./.cache/flatpak/system-cache
0	./.cache/flatpak
0	./.cache/media-art
0	./.cache/yelp/WebKitCache/Version 16/Blobs
4	./.cache/yelp/WebKitCache/Version 16
4	./.cache/yelp/WebKitCache
4	./.cache/yelp
0	./.cache/gnome-software/shell-extensions
1552	./.cache/gnome-software/odrs
1552	./.cache/gnome-software
5360	./.cache
4	./.dbus/session-bus
4	./.dbus
0	./.config/imsettings
0	./.config/gnome-session/saved-session
0	./.config/gnome-session
68	./.config/pulse
4	./.config/ibus/bus
4	./.config/ibus
8	./.config/dconf
4	./.config/evolution/sources
4	./.config/evolution
0	./.config/goa-1.0
0	./.config/gconf
4	./.config/gtk-3.0
0	./.config/abrt
4	./.config/nautilus
4	./.config/yelp
108	./.config
8	./.local/share/keyrings
8	./.local/share/gnome-shell
0	./.local/share/evolution/addressbook/trash
0	./.local/share/evolution/addressbook/system/photos
24	./.local/share/evolution/addressbook/system
24	./.local/share/evolution/addressbook
0	./.local/share/evolution/calendar/trash
4	./.local/share/evolution/calendar/system
4	./.local/share/evolution/calendar
0	./.local/share/evolution/mail/trash
0	./.local/share/evolution/mail
0	./.local/share/evolution/memos/trash
0	./.local/share/evolution/memos
0	./.local/share/evolution/tasks/trash
0	./.local/share/evolution/tasks
28	./.local/share/evolution
8	./.local/share/telepathy/mission-control
8	./.local/share/telepathy
0	./.local/share/sounds
0	./.local/share/applications
0	./.local/share/icc
0	./.local/share/gnome-settings-daemon
0	./.local/share/flatpak/db
0	./.local/share/flatpak/repo/tmp/cache
0	./.local/share/flatpak/repo/tmp
0	./.local/share/flatpak/repo/extensions
0	./.local/share/flatpak/repo/state
0	./.local/share/flatpak/repo/refs/heads
0	./.local/share/flatpak/repo/refs/mirrors
0	./.local/share/flatpak/repo/refs/remotes
0	./.local/share/flatpak/repo/refs
0	./.local/share/flatpak/repo/objects
4	./.local/share/flatpak/repo
4	./.local/share/flatpak
36	./.local/share/gvfs-metadata
180	./.local/share/tracker/data
180	./.local/share/tracker
0	./.local/share/nautilus/scripts
0	./.local/share/nautilus
0	./.local/share/webkitgtk/deviceidhashsalts/1
0	./.local/share/webkitgtk/deviceidhashsalts
0	./.local/share/webkitgtk/databases/indexeddb/v1
0	./.local/share/webkitgtk/databases/indexeddb
0	./.local/share/webkitgtk/databases
0	./.local/share/webkitgtk/localstorage
0	./.local/share/webkitgtk
276	./.local/share
276	./.local
0	./桌面
0	./下载
0	./模板
0	./公共
0	./文档
0	./音乐
0	./图片
0	./视频
5776	.
# 直接输入du没有加任何选项时,则du会分析【当前所在目录】的文件与目录所占用的磁盘空间
# 但是实际显示时,仅会显示目录容量(不含文件),因此(.)目录有很多文件没有被列出来
# 所以全部的目录相加不会登录(.)的容量,此外输出的数值数据为1K大小的容量单位

将文件的容量也列出来

[feliks@localhost ~]$ du -a
0	./.mozilla/extensions
0	./.mozilla/plugins
0	./.mozilla
4	./.bash_logout
4	./.bash_profile
4	./.bashrc
4	./.cache/gdm/session.log
4	./.cache/gdm
4	./.cache/imsettings/log
4	./.cache/imsettings
0	./.cache/libgweather
0	./.cache/evolution/addressbook/trash
0	./.cache/evolution/addressbook
0	./.cache/evolution/calendar/trash
0	./.cache/evolution/calendar
0	./.cache/evolution/mail/trash
0	./.cache/evolution/mail
0	./.cache/evolution/memos/trash
0	./.cache/evolution/memos
0	./.cache/evolution/sources/trash
0	./.cache/evolution/sources
0	./.cache/evolution/tasks/trash
0	./.cache/evolution/tasks
0	./.cache/evolution
0	./.cache/gnome-shell/update-check-3.28
0	./.cache/gnome-shell
4	./.cache/tracker/db-version.txt
1568	./.cache/tracker/meta.db
4	./.cache/tracker/db-locale.txt
1308	./.cache/tracker/meta.db-wal
32	./.cache/tracker/meta.db-shm
352	./.cache/tracker/ontologies.gvdb
4	./.cache/tracker/parser-sha1.txt
4	./.cache/tracker/locale-for-miner-user-guides.txt
4	./.cache/tracker/locale-for-miner-apps.txt
4	./.cache/tracker/last-crawl.txt
4	./.cache/tracker/first-index.txt
3288	./.cache/tracker
0	./.cache/abrt/applet_dirlist
4	./.cache/abrt/lastnotification
4	./.cache/abrt
12	./.cache/event-sound-cache.tdb.ea4a9b366ec245bfb19288f6213d4ee7.x86_64-redhat-linux-gnu
488	./.cache/gstreamer-1.0/registry.x86_64.bin
488	./.cache/gstreamer-1.0
0	./.cache/flatpak/system-cache
0	./.cache/flatpak
0	./.cache/media-art
4	./.cache/yelp/WebKitCache/Version 16/salt
0	./.cache/yelp/WebKitCache/Version 16/Blobs
4	./.cache/yelp/WebKitCache/Version 16
4	./.cache/yelp/WebKitCache
4	./.cache/yelp
0	./.cache/gnome-software/shell-extensions
1552	./.cache/gnome-software/odrs/ratings.json
1552	./.cache/gnome-software/odrs
1552	./.cache/gnome-software
5360	./.cache
4	./.dbus/session-bus/ea4a9b366ec245bfb19288f6213d4ee7-0
4	./.dbus/session-bus
4	./.dbus
0	./.config/imsettings
0	./.config/gnome-session/saved-session
0	./.config/gnome-session
12	./.config/pulse/ea4a9b366ec245bfb19288f6213d4ee7-device-volumes.tdb
12	./.config/pulse/ea4a9b366ec245bfb19288f6213d4ee7-stream-volumes.tdb
28	./.config/pulse/ea4a9b366ec245bfb19288f6213d4ee7-card-database.tdb
4	./.config/pulse/cookie
4	./.config/pulse/ea4a9b366ec245bfb19288f6213d4ee7-default-sink
4	./.config/pulse/ea4a9b366ec245bfb19288f6213d4ee7-default-source
68	./.config/pulse
4	./.config/ibus/bus/ea4a9b366ec245bfb19288f6213d4ee7-unix-0
4	./.config/ibus/bus
4	./.config/ibus
8	./.config/dconf/user
8	./.config/dconf
4	./.config/evolution/sources/system-proxy.source
4	./.config/evolution/sources
4	./.config/evolution
0	./.config/goa-1.0
4	./.config/user-dirs.dirs
4	./.config/user-dirs.locale
0	./.config/gconf
4	./.config/gtk-3.0/bookmarks
4	./.config/gtk-3.0
0	./.config/abrt
4	./.config/nautilus/desktop-metadata
4	./.config/nautilus
4	./.config/gnome-initial-setup-done
4	./.config/yelp/yelp.cfg
4	./.config/yelp
108	./.config
4	./.ICEauthority
4	./.local/share/keyrings/login.keyring
4	./.local/share/keyrings/user.keystore
8	./.local/share/keyrings
4	./.local/share/gnome-shell/application_state
4	./.local/share/gnome-shell/notifications
8	./.local/share/gnome-shell
0	./.local/share/evolution/addressbook/trash
24	./.local/share/evolution/addressbook/system/contacts.db
0	./.local/share/evolution/addressbook/system/photos
24	./.local/share/evolution/addressbook/system
24	./.local/share/evolution/addressbook
0	./.local/share/evolution/calendar/trash
4	./.local/share/evolution/calendar/system/calendar.ics
4	./.local/share/evolution/calendar/system
4	./.local/share/evolution/calendar
0	./.local/share/evolution/mail/trash
0	./.local/share/evolution/mail
0	./.local/share/evolution/memos/trash
0	./.local/share/evolution/memos
0	./.local/share/evolution/tasks/trash
0	./.local/share/evolution/tasks
28	./.local/share/evolution
4	./.local/share/telepathy/mission-control/accounts.cfg
4	./.local/share/telepathy/mission-control/accounts-goa.cfg
8	./.local/share/telepathy/mission-control
8	./.local/share/telepathy
4	./.local/share/gsettings-data-convert
0	./.local/share/sounds
0	./.local/share/applications
0	./.local/share/icc
0	./.local/share/gnome-settings-daemon/input-sources-converted
0	./.local/share/gnome-settings-daemon
0	./.local/share/flatpak/db
4	./.local/share/flatpak/repo/config
0	./.local/share/flatpak/repo/tmp/cache
0	./.local/share/flatpak/repo/tmp
0	./.local/share/flatpak/repo/extensions
0	./.local/share/flatpak/repo/state
0	./.local/share/flatpak/repo/refs/heads
0	./.local/share/flatpak/repo/refs/mirrors
0	./.local/share/flatpak/repo/refs/remotes
0	./.local/share/flatpak/repo/refs
0	./.local/share/flatpak/repo/objects
4	./.local/share/flatpak/repo
0	./.local/share/flatpak/.changed
4	./.local/share/flatpak
4	./.local/share/gvfs-metadata/home
32	./.local/share/gvfs-metadata/home-6a94f74b.log
36	./.local/share/gvfs-metadata
0	./.local/share/tracker/data/.meta.isrunning
104	./.local/share/tracker/data/tracker-store.journal
76	./.local/share/tracker/data/tracker-store.ontology.journal
180	./.local/share/tracker/data
180	./.local/share/tracker
0	./.local/share/nautilus/scripts
0	./.local/share/nautilus
0	./.local/share/webkitgtk/deviceidhashsalts/1
0	./.local/share/webkitgtk/deviceidhashsalts
0	./.local/share/webkitgtk/databases/indexeddb/v1
0	./.local/share/webkitgtk/databases/indexeddb
0	./.local/share/webkitgtk/databases
0	./.local/share/webkitgtk/localstorage
0	./.local/share/webkitgtk
276	./.local/share
276	./.local
4	./.esd_auth
0	./桌面
0	./下载
0	./模板
0	./公共
0	./文档
0	./音乐
0	./图片
0	./视频
4	./.Xauthority
5776	.

检查根目录下每个目录所占用的容量

[root@localhost feliks]# du -sm /*
0	/bin
141	/boot
0	/dev
42	/etc
6	/home
0	/lib
0	/lib64
0	/media
0	/mnt
0	/opt
du: 无法访问"/proc/58138/task/58138/fd/3": 没有那个文件或目录
du: 无法访问"/proc/58138/task/58138/fdinfo/3": 没有那个文件或目录
du: 无法访问"/proc/58138/fd/3": 没有那个文件或目录
du: 无法访问"/proc/58138/fdinfo/3": 没有那个文件或目录
0	/proc
1	/root
du: 无法访问"/run/user/1000/gvfs": 权限不够
9	/run
0	/sbin
0	/srv
0	/sys
1	/tmp
3672	/usr
910	/var
# 利用通配符*来代表每个目录,如果想要检查某个目录下哪个子目录占用最大的容量,可以用这个方法找出来。
# /proc里面的“没有那个文件或目录”(No such file or directory)的错误,只是因为内存中的程序,
# 程序执行结束就会消失,因此会有些目录找不到是正常的

磁盘的分区、格式化、检验与挂载

当我们想要在系统里面新增一块磁盘时

  1. 对磁盘进行划分,以建立可用的磁盘分区
  2. 对该磁盘分区进行格式化(format),以建立系统可用的文件系统
  3. 对刚建好的文件系统进行检验
  4. 在Linux上,需要建立挂载点(目录),并将其挂载上来

观察磁盘分区状态

lsblk(列出系统上的所有磁盘列表)

  • -d:仅列出磁盘本身,并不会列出该磁盘的分区数据

  • -f:同时列出该磁盘内的文件系统名称

  • -i:使用ASCII的字符输出,不要使用复杂的编码

  • -m:同时输出该设备在/dev下面的权限信息(rwx的数据)

  • -p:列出该设备的完整文件名,而不是仅列出最后的名字

  • -t:列出该磁盘设备的详细数据,包括磁盘阵列机制,预读写的数据量大小等

    image-20231008081308748

    • NAME:设备的文件名,省略/dev等前导目录

    • MAJ:MIN:主要与次要设备代码(内核识别的设备都是这两个代码来实现的)

    • RM:是否为可卸载设备:例如光盘、USB磁盘

    • SIZE:容量

    • RO:是否为只读设备

    • TYPE:是磁盘(disk)、分区(partition)还是只读存储器(rom)等输出

    • MOUNTPOINT:挂载点

blkid(列出设备的UUID参数)

  • UUID?
    • UUID是全局唯一标识符(universally unique identifier),这个标识符可以拿来作为挂在或是使用这个设备或文件系统

parted(列出磁盘的分区表类型与分区信息)

image-20231008103455070

列出/dev/sda磁盘的相关信息

磁盘分区:gdisk/fdisk

注意:MBR分区表使用fdisk分区,GPT分区表使用gdisk分区

① 先通过lsblkblkid先找到磁盘

② 使用parted /dev/xxx print来找出内部的分区表类型

③ 再根据分区表类型判断使用gdisk还是fdisk

gdisk

常用参数:

image-20231009140726801

  • d:删除一个分区

  • n:增加一个分区

  • p:打印出该磁盘的分区表(常用)

    image-20231009141232127

  • q:不保存分区就直接离开gdisk

  • w:保存分区操作后离开gdisk

该磁盘一共有40GB左右的容量,一共有83886080个扇区,实际上只使用到60708863号扇区

强调:只要不按下w,直接按q退出就相安无事,此外也不要在MBR分区上使用gdisk,如果命令按错了分区记录会消失,也不要在GPT分区上使用fdisk

用gdisk新增分区

image-20231009142805203

First sector:新增磁盘的开始扇区

Last sector:通过+1G这种操控容量的方式会自动计算结束扇区

Hex code or GUID:默认是Linux文件系统的8300

以同样的方法增加两个分区,一个是1G的vfat文件系统(Windows),一个是0.5G的swap(Linux Swap)

image-20231009143451444

此时保存退出后系统并不会立刻加载新的分区表,因为Linux担心系统出问题,所以分区表并没有被更新,因此有两种方法:

  1. 重新启动
  2. 通过partprobe来处理

partprobe更新Linux内核的分区表信息

partprobe -s:更新Linux内核分区表信息

image-20231009144356266

查看实际的磁盘分区状态:

image-20231009144434520

内核的分区记录:

image-20231009144503501

用gdisk删除一个分区

image-20231009145700564

然后记得用partprobe -s刷新分区表

image-20231009145954838

fdisk

fdisk跟gdisk的使用方式几乎一样,fdisk有时会使用柱面(cylinder)作为分区的最小单位

image-20240416225125040

磁盘格式化

要进行格式化的命令就是【mkfs:makefilesystem】,该命令其实是一个综合命令,它会去调用正确的文件系统格式化工具软件,CentOS7使用XFS作为默认文件系统,先了解mkfs.xfs

mkfs.xfs

[root@localhost ~]# mkfs.xfs [-b bsize] [-d parms] [-i parms] [-l parms] [-L label] [-f] [-r parms] 设备名称

9eaf23ce8ee1135d842011b22d43d20

将上面分出来的/dev/sda4格式化为xfs文件系统

[root@localhost ~]# partprobe -s
/dev/sda: msdos partitions 1 2 3 4
[root@localhost ~]# mkfs.xfs -f /dev/sda4
meta-data=/dev/sda4              isize=512    agcount=4, agsize=72684 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=290736, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

使用blkid查看是否格式化完毕

[root@localhost ~]# blkid /dev/sda4
/dev/sda4: UUID="da2a4d8e-e1c8-4022-9a49-47095b158926" TYPE="xfs" 

文件系统挂载与卸载

  • 单一文件系统不应该被重复挂载在不同的挂载点(目录)中
  • 单一目录不应该重复挂载多个文件系统
  • 要作为挂载点的目录,理论上应该都是空目录才行

mount

mount -a

mount [-l]

mount [-t 文件系统] LABEL='' 挂载点

mount [-t 文件系统] UUID='' 挂载点

mount[-t 文件系统] 设备文件名 挂载点

  • -a:依照配置文件/etc/fstab的数据将所有未挂载的磁盘都挂载上来
  • -l:单纯的输入mount会显示目前挂载的信息,加上-l可增列Label名称
  • -t:可以加上文件系统种类来指定想挂载的类型,常见的Linux支持类型有:xfs、ext3、ext4、reiserfs、vfat、iso9660(光盘格式)、nfs、cifs、smbfs(后面三种是网络文件系统类型)

通过blkid查看设备的UUID,更推荐使用UUID进行挂载,因为UUID是唯一的

  • 挂载xfs/ext4/vfat等文件系统

image-20231012144031082

  • 挂载CD或DVD光盘
    • 光驱一挂载之后就无法退出光盘了,除非将他卸载才能够退出(图形化界面会自动将光盘挂载到/media目录)
  • 挂载vfat中文移动磁盘(USB磁盘):mount -o codepage=950, iocharset=utf8 UUID="xxxxxxxxx" /data/usb
    • vfat格式可以使用codepage来处理,中文语系的代码为950
    • 默认的CentOS7并不支持NTFS文件系统格式
  • 重新挂载根目录与挂在不特定目录:mount -o remount, rw, auto /
    • 重新挂载(remount)是个非常重要的机制,如果根目录出现【只读】或者挂载的参数要改变就可以用它
    • 将目录挂载到另一个目录下:mount --bind /var /data/var
  • umount(将设备文件卸载)
    • -f:强制卸载。可用在类似网络文件系统(NFS)无法读取到的情况下
    • -l:立刻卸载文件系统,比-f还牛逼
    • -n:不更新/etc/mtab情况下卸载

文章作者: Feliks
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Feliks !
评论
  目录