首页 > 代码库 > 面对磁盘不头疼
面对磁盘不头疼
需要知道的概念
文件系统的类型
两种分区格式
MBR:如今主流的分区格式,针对两T以下的硬盘进行分区
分区的方式:针对柱面
0号扇区存放着:主引导程序446个字节(16进制)、主分区表64个字节每16个字节代表一个分区号。最后两个字节55AA分区结束标识表示上面有分区
分区多少:最多四个分区可3个主分区一个扩展分区。
主分区只有一个是保持激活状态用来识别系统盘。主分区从/dev/sda1-4
扩展分区只能一个,其中扩展分区用来存放其他逻辑分区,所以这个扩展分区不能做它用。逻辑分区从/dev/sda5开始不管前面的满没满。
GPT:针对大容量的硬盘进行分区,逐渐的主流,支持128个分区,最多支持64z大小的分区。GPT分区的头部会有个MBR的头引导系统,GPT分区表自动分别在头和尾两份。
创建一个磁盘系统的三个步骤
1.分区。
2.指定文件系统。
3.设置挂载点
1.分区
-分区的工具
-分区的识别
注意事项! 写到最后的配置文件中最好用uuid,其次卷标。
1分区的三个工具
fdisk:创建MBR分区,对GPT分区支持不是很好。不能用在GPT
[root@localhost ~]# fdisk -l #显示硬盘中的各个分区信息 Disk /dev/sda: 107.4 GB, 107374182400 bytes 255 heads, 63 sectors/track, 13054 cylinders #磁头 Units = cylinders of 16065 * 512 = 8225280 bytes #柱面 Sector size (logical/physical): 512 bytes / 512 bytes #扇区 I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x000ae00a #文件系统类型 Device Boot Start End Blocks Id System /dev/sda1 * 1 256 2048000 83 Linux Partition 1 does not end on cylinder boundary. /dev/sda2 256 511 2048000 82 Linux swap / Solaris Partition 2 does not end on cylinder boundary. /dev/sda3 511 13055 100760576 83 Linux [root@localhost ~]# fdisk /dev/sdb #进入这个硬盘 WARNING: DOS-compatible mode is deprecated. It‘s strongly recommended to switch off the mode (command ‘c‘) and change display units to sectors (command ‘u‘). Command (m for help): p # 打印硬盘信息 Command (m for help): d # 删除硬盘分区 Partition number (1-4): 1 #删除第一个 Command (m for help): d Selected partition 2 #只剩最后一个分区 Command (m for help): d No partition is defined yet! 提示没有分区了 Command (m for help): n # 新建分区 Command action e extended #选e扩展分区 p primary partition (1-4) # 选择1-4的分区 Partition number (1-4): 1 # 创建第一个分区 First cylinder (1-13054, default 1): # 选择柱面从哪开始默认就好 Using default value 1 # 提示使用默认值 Last cylinder, +cylinders or +size{K,M,G} (1-13054, default 13054): +5G #选择大小 Command (m for help): p #打印信息 Disk /dev/sdb: 107.4 GB, 107374182400 bytes 255 heads, 63 sectors/track, 13054 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x000b8dd1 Device Boot Start End Blocks Id System /dev/sdb1 1 654 5253223+ 83 Lin Command (m for help): w #保存退出 The partition table has been altered! Calling ioctl() to re-read partition table. #提示成功 Syncing disks.
gdisk:创建GPT分区,为了方便老的系统识别,头部会有个MBR的头,如果要使用GPT分区需要结构支持UEFI
1 [root@localhost ~]# gdisk /dev/sdc #修改分区类型 2 GPT fdisk (gdisk) version 0.8.10 3 4 Partition table scan: #支持的分区类型 5 MBR: MBR only 6 BSD: not present 7 APM: not present 8 GPT: not present 9 ...省略 10 Command (? for help): n #新建 11 Partition number (1-128, default 1): #分区号,默认就好 12 First sector (34-209715166, default = 2048) or {+-}size{KMGTP}: 13 #从哪里开始 14 Last sector (2048-209715166, default = 209715166) or {+-}size{KMGTP}: +1G #选择扇区大小 15 Current type is ‘Linux filesystem‘ 16 Hex code or GUID (L to show codes, Enter = 8300): #uuid号 17 18 Command (? for help): w #写入保存 19 20 Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING 21 PARTITIONS!! 22 23 Do you want to proceed? (Y/N): y #确定 24 OK; writing new GUID partition table (GPT) to /dev/sdc. 25 The operation has completed successfully. #提示成功 26 27 Command (? for help): p #打印分区表信息 28 Disk /dev/sdc: 209715200 sectors, 100.0 GiB 29 Logical sector size: 512 bytes 30 Disk identifier (GUID): 2C30B051-F34D-4AFE-8136-8D0537C2D69C 31 Partition table holds up to 128 entries 32 First usable sector is 34, last usable sector is 209715166 33 Partitions will be aligned on 2048-sector boundaries 34 Total free space is 207617981 sectors (99.0 GiB) 35 36 Number Start (sector) End (sector) Size Code Name 37 1 2048 2099199 1024.0 MiB 8300 Linux filesystem 38 39 40 [root@localhost ~]# fdisk -l /dev/sdc #显示这个磁盘分区信息 41 42 WARNING: GPT (GUID Partition Table) detected on ‘/dev/sdc‘! The util fdisk doesn‘t support GPT. Use GNU Parted. 43 ...省略 44 45 Device Boot Start End Blocks Id System 46 /dev/sdc1 1 13004 104857599+ ee GPT
parted:分区管理工具,能够创建,复制,调整等。
1 parted 用来创建管理分区的有两种运行方式一种交互一种全部写全 2 3 parted /dev/sdb mklabel gpt|msdos 4 创建分区类型 5 parted /dev/sdb prit 6 打印分区表信息 7 parted /dev/sdb mkpart primary 1 200 (默认M) 8 创建分区大小 9 parted /dev/sdb rm 1 10 删除第几个分区 11 parted -l 12 13 在linux中改变分区后不一定会立即显示出来,但是有同步的命令 14 5和7一样 parted 15 6上是 partx -a #更新分区新建信息 删除的是 partx -d --nr 7-8
2.分区的识别
partprobe 重新设置内存中的内核分区表版本 centos5 和centos7两个版本都能这个命令搞定
centos6 因为内核的关系需要6上是
partx -a #更新分区新建信息
partx -d --nr 分区名 #用来删除后的更新
3.查看分区信息的三种方法
1 [root@localhost ~]# lsblk 2 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT 3 sr0 11:0 1 3.7G 0 rom /media/CentOS_6.8_Final 4 sda 8:0 0 100G 0 disk 5 ├─sda1 8:1 0 2G 0 part /boot 6 ├─sda2 8:2 0 2G 0 part [SWAP] 7 └─sda3 8:3 0 96.1G 0 part / 8 sdb 8:16 0 100G 0 disk 9 └─sdb1 8:17 0 5G 0 part 10 sdc 8:32 0 100G 0 disk 11 └─sdc1 8:33 0 1G 0 part 12 13 14 [root@localhost ~]# cat /proc/partitions 15 major minor #blocks name 16 17 8 0 104857600 sda 18 8 1 2048000 sda1 19 8 2 2048000 sda2 20 8 3 100760576 sda3 21 8 16 104857600 sdb 22 8 17 5253223 sdb1 23 8 32 104857600 sdc 24 8 33 1048576 sdc1 25 26 #以上两种都是读取内存中的信息,如果想知道最新的信息需要上面的命令更新。 27 28 #接下来是查看硬件获取信息的 29 [root@localhost ~]# fdisk -l 30 31 Disk /dev/sda: 107.4 GB, 107374182400 bytes 32 255 heads, 63 sectors/track, 13054 cylinders 33 Units = cylinders of 16065 * 512 = 8225280 bytes 34 Sector size (logical/physical): 512 bytes / 512 bytes 35 I/O size (minimum/optimal): 512 bytes / 512 bytes 36 Disk identifier: 0x000ae00a 37 38 Device Boot Start End Blocks Id System 39 /dev/sda1 * 1 256 2048000 83 Linux 40 Partition 1 does not end on cylinder boundary. 41 /dev/sda2 256 511 2048000 82 Linux swap / Solaris 42 Partition 2 does not end on cylinder boundary. 43 /dev/sda3 511 13055 100760576 83 Linux 44 ...省略
2.指定文件系统
-查看支持的文件系统
-指定管理挂载文件系统
-文件系统相关
1.查看支持的文件系统
1 [root@localhost ~]# cat /proc/filesystems 2 nodev sysfs 3 nodev rootfs 4 nodev bdev 5 nodev proc 6 nodev cgroup 7 nodev cpuset 8 nodev tmpfs 9 nodev devtmpfs 10 nodev binfmt_misc 11 nodev debugfs 12 nodev securityfs 13 nodev sockfs 14 nodev usbfs 15 nodev pipefs 16 nodev anon_inodefs 17 nodev inotifyfs 18 nodev devpts 19 nodev ramfs 20 nodev hugetlbfs 21 iso9660 22 nodev pstore 23 nodev mqueue 24 nodev selinuxfs 25 nodev drm 26 ext4 27 nodev autofs 28 nodev fuse 29 fuseblk 30 31 32 [root@localhost ~]# ls /lib/modules/`uname -r`/kernel/fs 33 autofs4 configfs exportfs fat jbd mbcache.ko nls xfs 34 btrfs cramfs ext2 fscache jbd2 nfs squashfs 35 cachefiles dlm ext3 fuse jffs2 nfs_common ubifs 36 cifs ecryptfs ext4 gfs2 lockd nfsd udf
2.指定管理挂载文件系统
创建文件系统
1. mkfs.文件系统名 /设备路径名
2. mkfs -t 文件系统名 /设备路径名
-L ‘LABEL’ #设定卷标(卷标名最好是设备路径)
1 [root@localhost ~]# mkfs.ext4 /dev/sdc1 2 mke2fs 1.41.12 (17-May-2010) 3 ...省略 4 正在写入inode表: 完成 5 Creating journal (32768 blocks): 完成 6 Writing superblocks and filesystem accounting information: 完成 7 ...省略 8 This filesystem will be automatically checked every 35 mounts or 9 180 days, whichever comes first. Use tune2fs -c or -i to override. 10 #确认下修改信息 11 [root@localhost ~]# blkid 12 /dev/sda1: UUID="1ca2e948-5f62-492d-9925-bd2bb63c5418" TYPE="ext4" 13 /dev/sda2: UUID="d8a4bba5-5851-4cc0-a67f-d7bb1f361485" TYPE="swap" 14 /dev/sda3: UUID="8b325c7e-44d5-41f5-93d4-4d3480492673" TYPE="ext4" 15 /dev/sdc1: LABEL="/dev/sdc1" UUID="e65913f0-9948-450e-b1b6-00b3e7a68a9c" TYPE="ext4"
创建ext文件系统
1 #一般块数量*大小=inode所代表的大小 2 mke2fs 3 -t:(ext2|ext3|ext4) 4 -b:{1024|2048|4096} #指定块大小,根据系统默认就好,一般硬盘分区越大,块设备越大 5 -i: 指定 inode 多少空间创建inode 块大小应该比inode大 6 -n: # 指定inode节点数量 7 -m: # 指定给管理员所留节点百分比 0.几也可以,在特别大的硬盘中完全可以0.几 8 -O: 启用特性 #比如加上日志功能用这个不用格式化 9 例:tune2fs -O ^特性 /设备名 #关掉特性 10 -L:#加卷标 #最好挂载的文件夹做卷标 11 -j:#升级ext2系统为ext3,ext3是升级不到ext4的#这个估摸也用不到
ext系列文件系统的重新设定tune2fs #一般挂载完,你也不可能修改没什么作用。
挂载文件系统
mount
1 [root@localhost ~]# mount /dev/sdc2 /mnt/sdc2 2 [root@localhost ~]# mount /dev/sdc3 /mnt/sdc3 3 [root@localhost ~]# umount /dev/sdc3 4 [root@localhost ~]# df 5 Filesystem 1K-blocks Used Available Use% Mounted on 6 /dev/sda3 99047960 3759412 90250520 4% / 7 tmpfs 502068 84 501984 1% /dev/shm 8 /dev/sda1 1983056 35580 1845076 2% /boot 9 /dev/sr0 3824484 3824484 0 100% /media/CentOS_6.8_Final 10 /dev/sdc1 10194676 23064 9647092 1% /mnt/sdc1 11 /dev/sdc2 20519956 44992 19425920 1% /mnt/sdc2 12 13 [root@localhost ~]# mount /dev/sdc3 /mnt/sdc3 -r 14 [root@localhost ~]# touch /mnt/sdc3 text.sh 15 touch: 正在设置"/mnt/sdc3" 的时间: 只读文件系统 16 17 18 19 -n:藏老师用的 20 用cat /proc/mounts 可查看隐藏的文件系统挂载 21 [root@localhost ~]# mount -n /dev/sdc3 /mnt/sdc3 22 [root@localhost ~]# df 23 Filesystem 1K-blocks Used Available Use% Mounted on 24 /dev/sda3 99047960 3759420 90250512 4% / 25 tmpfs 502068 84 501984 1% /dev/shm 26 /dev/sda1 1983056 35580 1845076 2% /boot 27 /dev/sr0 3824484 3824484 0 100% 28 /media/CentOS_6.8_Final 29 /dev/sdc1 10194676 23064 9647092 1% /mnt/sdc1 30 /dev/sdc2 20519956 44992 19425920 1% /mnt/sdc2 31 32 [root@localhost ~]# cat /proc/mounts 33 /dev/sdc2 /mnt/sdc2 ext4 #显示的隐藏文件信息 34 rw,seclabel,relatime,barrier=1,data=http://www.mamicode.com/ordered 0 0 35 36 -L:根据卷标名挂载 37 /dev/sdc1: LABEL="/dev/sdc1" UUID="e65913f0-9948-450e-b1b6-00b3e7a68a9c" TYPE="ext4" 38 /dev/sdc2: UUID="b749b087-1106-4e0f-ae67-f9beb828cd76" TYPE="ext4" 39 /dev/sdc3: UUID="cf247325-a470-47bc-92fd-e6d0d8ba754d" TYPE="ext4" 40 [root@localhost ~]# umount /dev/sdc1 41 [root@localhost ~]# mount -L "/dev/sdc1" /mnt/sdc1 42 [root@localhost ~]# df 43 Filesystem 1K-blocks Used Available Use% Mounted on 44 /dev/sda3 99047960 3759420 90250512 4% / 45 tmpfs 502068 84 501984 1% /dev/shm 46 /dev/sda1 1983056 35580 1845076 2% /boot 47 /dev/sr0 3824484 3824484 0 100% 48 /media/CentOS_6.8_Final 49 /dev/sdc2 20519956 44992 19425920 1% /mnt/sdc2 50 /dev/sdc1 10194676 23064 9647092 1% /mnt/sdc1 51 [root@localhost ~]# 52 -U:根据UUID修改 53 54 -B:挂载文件夹 55 mout -B /boot /mnt/boot 56 57 58 挂载文件:作用在分区把磁盘空间都分完了,但是各个分区都有剩余 59 [root@localhost ~]# dd if=/dev/zero of=/root/text bs=1k count=512 60 记录了512+0 的读入 61 记录了512+0 的写出 62 524288字节(524 kB)已复制,0.0135686 秒,38.6 MB/秒 63 [root@localhost ~]# mkfs.ext4 text 64 mke2fs 1.41.12 (17-May-2010) 65 text is not a block special device. 66 无论如何也要继续? (y,n) y 67 68 正在写入inode表: 完成 69 70 文件系统小得无法记录日志 71 Writing superblocks and filesystem accounting information: 完成 72 73 74 挂载文件 75 [root@localhost ~]# mount -o loop text /mnt/text 76 [root@localhost ~]# mount 77 /dev/sda3 on / type ext4 (rw) 78 proc on /proc type proc (rw) 79 sysfs on /sys type sysfs (rw) 80 devpts on /dev/pts type devpts (rw,gid=5,mode=620) 81 tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0") 82 /dev/sda1 on /boot type ext4 (rw) 83 none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) 84 /root/text on /mnt/text type ext4 (rw,loop=/dev/loop0) 85 86 87 # 挂载文件系统一定要记着 先格式化,文件大小就是你以后你挂载点大小,填充记得大点,猜测肯定有人犯错,故意写在最后。 88 89 [root@localhost ~]# ls /dev/loo* 90 /dev/loop0 /dev/loop2 /dev/loop4 /dev/loop6 91 /dev/loop1 /dev/loop3 /dev/loop5 /dev/loop7 92 #loop系统默认设置8个,要增加可以修改/boot/grub/grub.conf这个文件 93 kernel /vmlinuz-2.6.32-642.el6.x86_64 ro root=UUID=8b325c7e-44d5-41f5-93d4-4d3480492673 rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crash kernel=auto LANG=zh_CN.UTF-8 rd_NO_LVM rd_NO_DM rhgb quiet max_loop=50 94 initrd /initramfs-2.6.32-642.el6.x86_64.img 95 ~ 96 97 "/boot/grub/grub.conf" 17L, 758C 已写入 98 #重启后生效 99 [root@localhost ~]# ls /dev/loo* 100 /dev/loop0 /dev/loop17 /dev/loop25 /dev/loop33 /dev/loop41 /dev/loop5 101 /dev/loop1 /dev/loop18 /dev/loop26 /dev/loop34 /dev/loop42 /dev/loop6 102 /dev/loop10 /dev/loop19 /dev/loop27 /dev/loop35 /dev/loop43 /dev/loop7 103 ...省略 104 105 生产中不能重启用的办法是 106 [root@localhost ~]# mknod /app/loop101 b 7 101 107 [root@localhost ~]# ll /app/loop* 108 brw-r--r--. 1 root root 7, 100 4月 22 07:01 /app/loop100 109 brw-r--r--. 1 root root 7, 101 4月 22 14:17 /app/loop101 110 111 选择指定设备挂载 没什么用 112 [root@localhost ~]# losetup /dev/loop20 text2 113 [root@localhost ~]# losetup -a 114 /dev/loop0: [0803]:3015065 (/root/text) 115 /dev/loop20: [0803]:3014775 (/root/text2) 116 117 -o:多个选项使用逗号分隔 118 async:异步模式,默认情况 异步挂载 119 sync:同步模式,内存修改,同时写磁盘 120 atime:noatime 禁用atime更改(touch刷才会变)***** 121 relatime:文件访问的特性,这个选项满足两个条件才会更改比如一天没修改了,或者mtime比访问时间新也可以改变atime。(默认relatime) 122 ll /app/issue --time=atime 查看文件的修改时间 123 diratime/nodiratime:目录的访问时间 124 exec|noexec:修改特性文件不能直接执行,但可以用bash等工具使用 125 mount -o noexec 、dev/sdb1 /mnt/sdb1 126 nodev:取消设备的使用,如果是设备文件就失效 127 mount -o node /dev/sdb1 /mnt/sdb1 128 nosuid:禁止suid权限 129 mount -o nosuid /dev/sdb1 /mnt/sdb1 130 remount 重新加载 #(设置权限) 131 mount -o remount,ro /mnt/sdb1 #ro只读
mount -o remount,rw /mnt/sdb3 #修改读写
132 user/nouser: 是否允许普通用户挂载,默认管理员才能挂载
创建swap
1 [root@localhost ~]# mkswap /dev/sdc3 2 mkswap: /dev/sdc3: warning: don‘t erase bootbits sectors 3 (dos partition table detected). Use -f to force. 4 Setting up swapspace version 1, size = 2104508 KiB 5 no label, UUID=9e94c4e7-c696-44e1-8f80-c5c95efce269 6 7 #这次做swap文件系统的时候,忘记更新分区信息,一定记着分区进行多次更改后记得更新。 8 [root@localhost ~]# free 9 total used free shared buffers cached 10 Mem: 1004136 454052 550084 1408 25380 226692 11 -/+ buffers/cache: 201980 802156 12 Swap: 2047996 0 2047996 13 [root@localhost ~]# swapon /dev/sdc3 14 [root@localhost ~]# free 15 total used free shared buffers cached 16 Mem: 1004136 455788 548348 1408 25384 226692 17 -/+ buffers/cache: 203712 800424 18 Swap: 4152504 0 4152504 19 20 21 更改配置文件用法 22 [root@localhost ~]# vim /etc/fstab 23 UUID="9e94c4e7-c696-44e1-8f80-c5c95efce269" swap swap defaults,pri=100 0 0 24 ~ 25 ~ 26 "/etc/fstab" 17L, 948C 已写入 27 [root@localhost ~]# swapon -a #读入文件信息进内存
上述的除了swap其他都是临时挂载,系统重启后就无效如果需要永久生效需要修改配置文件
1 [root@localhost ~]# vim /etc/fstab 2 # 3 UUID=8b325c7e-44d5-41f5-93d4-4d3480492673 / ext4 defaults 1 1 4 UUID=1ca2e948-5f62-492d-9925-bd2bb63c5418 /boot ext4 defaults 1 2 5 UUID=d8a4bba5-5851-4cc0-a67f-d7bb1f361485 swap swap defaults 0 0 6 tmpfs /dev/shm tmpfs defaults 0 0 7 devpts /dev/pts devpts gid=5,mode=620 0 0 8 sysfs /sys sysfs defaults 0 0 9 proc /proc proc defaults 0 0 10 /root/text /mnt/text ext4 defaults 0 0 11 ~ 12 ~
文件系统相关工具
fsck /dev/设备名 修复文件系统 #作用不大,修复的不是数据而是超级块。打电话是你最好的选择
查看分区挂载相关
面对磁盘不头疼