对Linux而言,虚拟内存必须是独立的文件系统,因此只能用分区来提供虚拟内存。
root@ubuntu:~# fdisk-l Disk /dev/sda: 21.5GB, 21474836480 bytes 255 heads, 63sectors/track, 2610 cylinders, total 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 identifier:0x0007ef80 Device Boot Start End Blocks Id System /dev/sda1 * 2048 39845887 19921920 83 Linux /dev/sda2 39847934 41940991 1046529 5 Extended /dev/sda3 39845888 39847933 1023 83 Linux /dev/sda5 39849982 41940991 1045505 83 Linux Partition tableentries are not in disk order
#每种分区的ID字段是不一样的,要想修改分区类型就要修改分区的ID
修改分区类别:
root@ubuntu:~# fdisk/dev/sda Command (m for help):m Command action a toggle a bootable flag b edit bsd disklabel c toggle the dos compatibility flag d delete a partition 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 s create a new empty Sun disklabel t change a partition's system id u change display/entry units v verifythe partition table w write table to disk and exit x extra functionality (experts only) Command (m for help):t Partition number(1-5): 5 Hex code (type L to listcodes): 82 #修改/dev/sda5为swap分区(swap分区的标识为82) Changed system typeof partition 5 to 82 (Linux swap / Solaris) Command (m for help):w The partition tablehas been altered! Calling ioctl() tore-read partition table. WARNING: Re-readingthe partition table failed with error 16: Device or resource busy. The kernel still usesthe old table. The new table will be used at the next reboot orafter you run partprobe(8) or kpartx(8) Syncing disks.
修改分区属性之后,我们还要将/dev/sda5创建为swap文件系统才能使用:
root@ubuntu:~# mkswap/dev/sda5 #创建为swap文件系统 Setting up swapspaceversion 1, size = 1045500 KiB no label,UUID=f33720ed-3b0c-46e1-a898-c7f4cb9adfb8
接下来就要启用swap分区,启用swap之前先查看当前内存的使用情况:
root@ubuntu:~# free –m #-m:以MB方式显示内存大小 total used free shared buffers cached Mem: 1000 777 222 0 133 362 -/+buffers/cache: 281 719 Swap: 0 0 0 #此时swap分区的大小为0
启动swap分区:
root@ubuntu:~# swapon/dev/sda5 #启用/dev/sda5的swap分区 root@ubuntu:~# free –m #查看内存使用情况 total used free shared buffers cached Mem: 1000 779 221 0 133 362 -/+buffers/cache: 282 718 Swap: 1020 0 1020 #此时swap分区的大小和/dev/sda5一样
比较swap分区大小和/dev/sda5分区大小:
root@ubuntu:~# fdisk-l Disk /dev/sda: 21.5GB, 21474836480 bytes 255 heads, 63sectors/track, 2610 cylinders, total 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 identifier:0x0007ef80 Device Boot Start End Blocks Id System /dev/sda1 * 2048 39845887 19921920 83 Linux /dev/sda2 39847934 41940991 1046529 5 Extended /dev/sda3 39845888 39847933 1023 83 Linux /dev/sda5 39849982 41940991 1045505 82 Linux swap / Solaris Partition tableentries are not in disk order
关闭swap:
root@ubuntu:~# swapoff –a #关闭swap root@ubuntu:~# free-m total used free shared buffers cached Mem: 1000 778 222 0 133 362 -/+buffers/cache: 282 718 Swap: 0 0 0
如果当前系统已经没有空闲磁盘空间用于创建分区了,又急着要扩展swap分区。Linux支持在某个文件系统上创建一个模拟的本地回环设备,来模拟一个磁盘使用。从一个文件系统的空闲空间中拿出一个G,创建一个本地回环设备(回环设备就是用软件模拟出来的设备),我们模拟出一个大小为1G的设备,把该设备创建成交换分区,也能使用。
创建本地回环设备的方法:dd命令。dd是复制命令,和copy类似,但是copy复制的是文件,而dd则是在二进制级别直接复制01代码,来创建文件,所以dd可以只复制文件的一部分,也可以指定复制磁盘的某个区域。
对任何磁盘来讲,最开头的512字节是主引导记录(MBR,Main BootRecord),我们要经常备份主引导记录,当磁盘崩溃时可以用主引导记录来恢复,但是主引导记录不是文件,所以要用dd命令来备份主引导记录。
dd命令使用例子:
root@ubuntu:~# dd if=/etc/issue of=/tmp/issue 0+1 records in 0+1 records out 23 bytes (23 B) copied, 5.4812e-05 s, 420 kB/s # 复制/etc/issue到/tmp/issue,显示复制了23个字节 # if指定source,of指定destination
dd命令常用方法:
1. if:指定source
2. of:指定destination
3. bs:block size,指定块大小(复制时的最小单位,与文件系统的块大小无关)
4. count:与bs结合使用,指定要复制多少count的bs
备份主引导记录:
root@ubuntu:~# dd if=/dev/sda of=/root/mbr.backup bs=512count=1 1+0 records in 1+0 records out 512 bytes (512 B) copied, 0.000182559 s, 2.8 MB/s
以后要是磁盘的MBR出错了,可以把该磁盘挂载到其他主机上,并且用mbr.backup来恢复磁盘。恢复mbr的方法;
root@ubuntu:~# dd if=/root/mbr.backup of=/dev/sda bs=512count=1 1+0 records in 1+0 records out 512 bytes (512 B) copied, 0.00245839 s, 208 kB/s #不用指定开始位置,则默认从磁盘的0地址出开始
如果想删除磁盘上的所有分区,并重新规划:
dd if=/dev/zero of=/dev/sda bs=512 count=1
#用泡泡机(不停的吐0)把主引导记录清零
用泡泡机做出一个128M的文件(bigfile),该文件就可以用作本地回环设备;
root@ubuntu:~# dd if=/dev/zero of=/root/bigfile bs=1Mcount=128 128+0 records in 128+0 records out 134217728 bytes (134 MB) copied, 3.93615 s, 34.1 MB/s
查看bigfile的大小:
root@ubuntu:/root# ll -h #-h可以提高文件的可读性 total 129M drwx------ 9 rootroot 4.0K Jan 22 19:39 ./ drwxr-xr-x 23 root root 4.0K Jul 16 2015 ../ -rw-r--r-- 1 rootroot 3.1K Apr 19 2012 .bashrc -rw-r--r-- 1 root root128M Jan 22 19:39 bigfile drwx------ 3 rootroot 4.0K Jul 16 2015 .cache/ drwx------ 6 rootroot 4.0K Aug 31 06:11 .config/ drwxr-xr-x 5 rootroot 4.0K Jul 16 2015 .eclipse/ drwx------ 2 rootroot 4.0K Jul 16 2015 .gvfs/ drwxr-xr-x 3 rootroot 4.0K Jul 16 2015 .local/ -rw-r--r-- 1 rootroot 512 Jan 22 19:28 mbr.backup drwxr-xr-x 3 rootroot 4.0K Jul 16 2015 .p2/ -rw-r--r-- 1 rootroot 140 Apr 19 2012 .profile drwx------ 2 rootroot 4.0K Jan 22 18:29 .pulse/ -rw------- 1 rootroot 256 Jul 12 2015 .pulse-cookie
把bigfile做成swap分区:
root@ubuntu:/# mkswap /root/bigfile Setting up swapspace version 1, size = 131068 KiB no label, UUID=4bdfb5e8-1aff-450a-a658-31b945e2d4e8
启用bigfile:
root@ubuntu:/# swapon /root/bigfile
查看内存大小:
root@ubuntu:/# free -m total used free shared buffers cached Mem: 1000 862 138 0 134 460 -/+ buffers/cache: 267 733 Swap: 127 0 127
取消bigfile:
root@ubuntu:/# swapoff /root/bigfile root@ubuntu:/# free -m total used free shared buffers cached Mem: 1000 862 138 0 134 460 -/+ buffers/cache: 267 733 Swap: 0 0 0
我们自己创建并挂载的文件系统在Linux重启之后并不会自动挂载,这是因为Linux启动后是检查配置文件来执行挂载命令的。这个配置文件是/etc/fstab。
fstab文件有六个字段:
1. 设备名
2. 挂载点
3. 文件系统
4. 挂载选项,多个选项用逗号分隔
5. 完全备份的频率:0(从不备份),1(每天都做完全备份),2(每隔一天做完全备份)
6. 文件系统检测次序:0-9,0(不检测),1(首先检测,只能是根文件系统),以此类推
如果想让自己创建的文件系统开机挂载,直接编辑fstab文件:
增加一条sda5的挂载记录,sda5就可以开机挂载了。
Swap分区的开机挂载方法:
Proc和sysfs是虚拟文件系统。
df命令:
df - report filesystem disk space usage,查看文件系统使用情况。
root@ubuntu:~# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 19G 8.3G 9.6G 47% / udev 494M 12K 494M 1% /dev tmpfs 201M 780K 200M 1% /run none 5.0M 0 5.0M 0% /run/lock none 501M 200K 501M 1% /run/shm
查看iNode的使用情况:
root@ubuntu:~# df -i Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sda1 1245184 324308 920876 27% / udev 126264 488 125776 1% /dev tmpfs 128092 395 127697 1% /run none 128092 5 128087 1% /run/lock none 128092 7 128085 1% /run/shm
du命令:
df是用来查看文件系统使用情况的,而du则是用来查看单个文件使用磁盘的情况的。
du - estimate file space usage
ls命令只能显示子目录本身的大小,而无法显示子目录中包含的文件的大小。
root@ubuntu:~# du -s /etc #-s:summary,显示目录中所有文件大小的总和 14672 /etc root@ubuntu:~# du -sh /etc 15M /etc