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会在这个区段里面找到一个到数个的extent区块,将文件放置在这个区块内,等到分配完毕后再写入到
XFS文件系统的描述数据观察
找出系统在/boot这个挂载点下面的文件系统的超级区块记录
isize:inode容量,每个有512B这么大agcount:存储区群组(allocation group)的个数,共有4个agsize:是指每个存储区群组具有65536个区块,配合bsize区块设置为4K,因此整个文件系统的容量就是4*35536*4K这么大sectsz:逻辑扇区(sector)的容量设置为512Bbsize:区块容量,每个区块为4K,共有262144个区块在这个文件系统内sunit与swidth:与磁盘阵列的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)的错误,只是因为内存中的程序,
# 程序执行结束就会消失,因此会有些目录找不到是正常的
磁盘的分区、格式化、检验与挂载
当我们想要在系统里面新增一块磁盘时
- 对磁盘进行划分,以建立可用的磁盘分区
- 对该磁盘分区进行格式化(format),以建立系统可用的文件系统
- 对刚建好的文件系统进行检验
- 在Linux上,需要建立挂载点(目录),并将其挂载上来
观察磁盘分区状态
lsblk(列出系统上的所有磁盘列表)
-d:仅列出磁盘本身,并不会列出该磁盘的分区数据
-f:同时列出该磁盘内的文件系统名称
-i:使用ASCII的字符输出,不要使用复杂的编码
-m:同时输出该设备在/dev下面的权限信息(rwx的数据)
-p:列出该设备的完整文件名,而不是仅列出最后的名字
-t:列出该磁盘设备的详细数据,包括磁盘阵列机制,预读写的数据量大小等
NAME:设备的文件名,省略/dev等前导目录
MAJ:MIN:主要与次要设备代码(内核识别的设备都是这两个代码来实现的)
RM:是否为可卸载设备:例如光盘、USB磁盘
SIZE:容量
RO:是否为只读设备
TYPE:是磁盘(disk)、分区(partition)还是只读存储器(rom)等输出
MOUNTPOINT:挂载点
)
blkid(列出设备的UUID参数)
- UUID?
- UUID是全局唯一标识符(universally unique identifier),这个标识符可以拿来作为挂在或是使用这个设备或文件系统
parted(列出磁盘的分区表类型与分区信息)
列出/dev/sda磁盘的相关信息
磁盘分区:gdisk/fdisk
注意:MBR分区表使用fdisk分区,GPT分区表使用gdisk分区
① 先通过lsblk或blkid先找到磁盘
② 使用parted /dev/xxx print来找出内部的分区表类型
③ 再根据分区表类型判断使用gdisk还是fdisk
gdisk
常用参数:
d:删除一个分区
n:增加一个分区
p:打印出该磁盘的分区表(常用)
q:不保存分区就直接离开gdisk
w:保存分区操作后离开gdisk
该磁盘一共有40GB左右的容量,一共有83886080个扇区,实际上只使用到60708863号扇区
强调:只要不按下w,直接按q退出就相安无事,此外也不要在MBR分区上使用gdisk,如果命令按错了分区记录会消失,也不要在GPT分区上使用fdisk
用gdisk新增分区
First sector:新增磁盘的开始扇区
Last sector:通过+1G这种操控容量的方式会自动计算结束扇区
Hex code or GUID:默认是Linux文件系统的8300
以同样的方法增加两个分区,一个是1G的vfat文件系统(Windows),一个是0.5G的swap(Linux Swap)
此时保存退出后系统并不会立刻加载新的分区表,因为Linux担心系统出问题,所以分区表并没有被更新,因此有两种方法:
- 重新启动
- 通过partprobe来处理
partprobe更新Linux内核的分区表信息
partprobe -s:更新Linux内核分区表信息
查看实际的磁盘分区状态:
内核的分区记录:
用gdisk删除一个分区
然后记得用partprobe -s刷新分区表
fdisk
fdisk跟gdisk的使用方式几乎一样,fdisk有时会使用柱面(cylinder)作为分区的最小单位
磁盘格式化
要进行格式化的命令就是【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] 设备名称
将上面分出来的/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等文件系统
- 挂载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情况下卸载