0%

linux 硬盘操作

Linux 硬盘操作

nfs 文件共享

centos6 下安装配置

服务端

1
2
3
4
rpm -qa|grep nfs
rpm -qa|grep rpcbind
yum install -y nfs-utils-* rpcbind
vim /etc/exports
1
2
3
cat /etc/exports
/data *(rw,no_root_squash,no_all_squash,sync)
exportfs -r 使配置文件生效
1
2
3
4
service rpcbind start
service nfs start
chkconfig rpcbind on
chkconfig nfs on

showmount 命令查询 NFS 的共享状态

1
2
showmount -e    //默认查看自己共享的服务,前提是要DNS能解析自己,不然容易报错
showmount -a    //显示已经与客户端连接上的目录信息

关闭防火墙

1
2
service iptables stop
chkconfig iptables off

客户端

挂载

1
2
3
4
5
6
rpm -qa|grep nfs
rpm -qa|grep rpcbind
yum install -y nfs-utils-* rpcbind
mkdir /log
showmount -e 192.168.100.51
mount -t nfs 192.168.100.51:/data /log

启动自动挂载 nfs 文件系统

1
2
vim /etc/fstab 添加
192.168.100.51:/data /log nfs defaults 0 0

解除挂载

1
2
umount /log
mount

相关介绍

https://www.cnblogs.com/mchina/archive/2013/01/03/2840040.html

https://www.lvtao.net/server/centos-nfs.html

服务器端防火墙设置(NFS 开启防墙配置)

修改/etc/service,添加以下内容(端口号必须在 1024 以下,且未被占用)

1
2
3
4
5
# Local services
mountd 1011/tcp #rpc.mountd
mountd 1011/udp #rpc.mountd
rquotad 1012/tcp #rpc.rquotad
rquotad 1012/udp #rpc.rquotad

重起 Linux NFS 服务

1
service nfs restart

此时 rpc 相关端口已经被固定,可以为 Linux NFS 添加防火墙规则

1
2
3
4
5
-A INPUT -m state --state NEW -m tcp -p tcp --dport 111 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 2049 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 1011 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 1012 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 32768 -j ACCEPT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#portmap
/sbin/iptables -A INPUT -s 192.168.1.0/254 -p tcp --dport 111 -j ACCEPT
/sbin/iptables -A INPUT -s 192.168.1.0/254 -p udp --dport 111 -j ACCEPT
#nfsd
/sbin/iptables -A INPUT -s 192.168.1.0/254 -p tcp --dport 2049 -j ACCEPT
/sbin/iptables -A INPUT -s 192.168.1.0/254 -p udp --dport 2049 -j ACCEPT
#mountd
/sbin/iptables -A INPUT -s 192.168.1.0/254 -p tcp --dport 1011 -j ACCEPT
/sbin/iptables -A INPUT -s 192.168.1.0/254 -p udp --dport 1011 -j ACCEPT
#rquotad
/sbin/iptables -A INPUT -s 192.168.1.0/254 -p tcp --dport 1012 -j ACCEPT
/sbin/iptables -A INPUT -s 192.168.1.0/254 -p udp --dport 1012 -j ACCEPT
#rpc.statd
/sbin/iptables -A INPUT -s 192.168.1.0/254 -p tcp --dport 32768 -j ACCEPT
/sbin/iptables -A INPUT -s 192.168.1.0/254 -p udp --dport 32768 -j ACCEPT

NFS 的常用目录

1
2
3
4
5
/etc/exports                         NFS服务的主要配置文件
/usr/sbin/exportfs NFS服务的管理命令
/usr/sbin/showmount 客户端的查看命令
/var/lib/nfs/etab 记录NFS分享出来的目录的完整权限设定值
/var/lib/nfs/xtab 记录曾经登录过的客户端信息

/etc/exports 配置文件说明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/etc/exports文件内容格式:

<输出目录> [客户端1 选项(访问权限,用户映射,其他)] [客户端2 选项(访问权限,用户映射,其他)]
a. 输出目录:

输出目录是指NFS系统中需要共享给客户机使用的目录;

b. 客户端:

客户端是指网络中可以访问这个NFS输出目录的计算机

客户端常用的指定方式

指定ip地址的主机:192.168.0.200
指定子网中的所有主机:192.168.0.0/24 192.168.0.0/255.255.255.0
指定域名的主机:david.bsmart.cn
指定域中的所有主机:*.bsmart.cn
所有主机:*
c. 选项:

选项用来设置输出目录的访问权限、用户映射等。

NFS主要有3类选项:

访问权限选项

设置输出目录只读:ro
设置输出目录读写:rw
用户映射选项

all_squash:将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nfsnobody);
no_all_squash:与all_squash取反(默认设置);
root_squash:将root用户及所属组都映射为匿名用户或用户组(默认设置);
no_root_squash:与rootsquash取反;
anonuid=xxx:将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx);
anongid=xxx:将远程访问的所有用户组都映射为匿名用户组账户,并指定该匿名用户组账户为本地用户组账户(GID=xxx);
其它选项

secure:限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置);
insecure:允许客户端从大于1024的tcp/ip端口连接服务器;
sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;
async:将数据先保存在内存缓冲区中,必要时才写入磁盘;
wdelay:检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率(默认设置);
no_wdelay:若有写操作则立即执行,应与sync配合使用;
subtree:若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置);
no_subtree:即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率;

相关命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
1、exportfs

如果我们在启动了NFS之后又修改了/etc/exports,是不是还要重新启动nfs呢?这个时候我们就可以用exportfs 命令来使改动立刻生效,该命令格式如下:

  # exportfs [-aruv]

  -a 全部挂载或卸载 /etc/exports中的内容
  -r 重新读取/etc/exports 中的信息 ,并同步更新/etc/exports、/var/lib/nfs/xtab
  -u 卸载单一目录(和-a一起使用为卸载所有/etc/exports文件中的目录)
  -v 在export的时候,将详细的信息输出到屏幕上。

具体例子:
  # exportfs -au 卸载所有共享目录
  # exportfs -rv 重新共享所有目录并输出详细信息

2、nfsstat

查看NFS的运行状态,对于调整NFS的运行有很大帮助。

3、rpcinfo
查看rpc执行信息,可以用于检测rpc运行情况的工具,利用rpcinfo -p 可以查看出RPC开启的端口所提供的程序有哪些。

4、showmount

  -a 显示已经于客户端连接上的目录信息
  -e IP或者hostname 显示此IP地址分享出来的目录

5、netstat

可以查看出nfs服务开启的端口,其中nfs 开启的是2049,portmap 开启的是111,其余则是rpc开启的。

最后注意两点,虽然通过权限设置可以让普通用户访问,但是挂载的时候默认情况下只有root可以去挂载,普通用户可以执行sudo。

NFS server 关机的时候一点要确保NFS服务关闭,没有客户端处于连接状态!通过showmount -a 可以查看,如果有的话用kill killall pkill 来结束,(-9 强制结束)

问题

客户端在挂载的时候遇到的一个问题如下,可能是网络不太稳定,NFS 默认是用 UDP 协议,换成 TCP 协议即可:

1
mount -t nfs 192.168.100.51:/data /log  -o proto=tcp -o nolock

解除挂载 umount.nfs: /log: device is busy

1
2
3
4
5
fuser -m -v /log
用户 进程号 权限 命令
/log: root 26741 ..c.. bash

kill -9 26741

fstab 文件

保存文件挂载信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
vi /etc/fstab

#
# /etc/fstab
# Created by anaconda on Wed May 18 23:29:58 2016
#
# 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/VolGroup-lv_root / ext4 defaults 1 1
UUID=3725aff0-9f5e-47ce-85b2-80e438dc9df8 /boot ext4 defaults 1 2
/dev/mapper/VolGroup-lv_home /opt ext4 defaults 1 2
/dev/mapper/VolGroup-lv_swap swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0

mount

查看挂载信息

1
2
3
4
5
6
7
8
9
10
[root@localhost opt]# mount
/dev/mapper/VolGroup-lv_root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
/dev/mapper/VolGroup-lv_home on /opt type ext4 (rw)
[root@localhost opt]#

挂载分区

挂载/dev/mapper/VolGroup-lv_home 到/opt

1
mount /dev/mapper/VolGroup-lv_home /opt

umount

取消挂载

1
umount /home

du

查看当前目录使用大小

du -sh

1
2
3
[root@localhost opt]# du -sh
20K .
[root@localhost opt]#

df

查看当前硬盘挂载信息及使用情况

df -h

1
2
3
4
5
6
7
8
9
[root@localhost opt]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
50G 646M 46G 2% /
tmpfs 1.9G 0 1.9G 0% /dev/shm
/dev/sda1 477M 25M 427M 6% /boot
/dev/mapper/VolGroup-lv_home
405G 71M 385G 1% /opt
[root@localhost opt]#

fdisk

查看硬盘信息

fdisk -l

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
[root@localhost opt]# fdisk -l

Disk /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 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: 0x54bbc984

Device Boot Start End Blocks Id System
/dev/sda1 * 1 64 512000 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 64 60802 487873536 8e Linux LVM

Disk /dev/mapper/VolGroup-lv_root: 53.7 GB, 53687091200 bytes
255 heads, 63 sectors/track, 6527 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: 0x00000000


Disk /dev/mapper/VolGroup-lv_swap: 4076 MB, 4076863488 bytes
255 heads, 63 sectors/track, 495 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: 0x00000000


Disk /dev/mapper/VolGroup-lv_home: 441.8 GB, 441815400448 bytes
255 heads, 63 sectors/track, 53714 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: 0x00000000

[root@localhost opt]#

格式化与分区

fdisk -l /dev/sda 查看第一块硬盘分区情况

fdisk /dev/sdb 给第二块硬盘分区

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
command acton (m for help):m #显示命令列表

  a-设置可引导标志;b-设置卷标; d-删除一个分区; n-新建分区

  p-显示分区信息; v-校验分区表;q-不存盘退出;w-存盘退出;t-改变分区类型

  command acton (m for help):n 新建分区

  command action

  e extended #扩展分区

  p primary partition (1-4) #主分区

  p #创建主分区

  partition number (1-4):1 #创建第一个主分区  first cylinder (1-522,default 1):1 #起始柱面(第一个分区始终为1)

  last cylinder or +size or +sizeM or +siezK(1-522,default 522): 10 #截止柱面(若522则整个硬盘分给了一个区)此分区大小是系统按照柱面大小自动计算出来的

  command acton (m for help):n

  command action

  e extended

  p primary partition (1-4)

  p
  
  partition number (1-4):2 #创建第二个主分区

  first cylinder (11-522,default 11):11

  last cylinder ...(11-522,default 522): +100M #自定义分区大小

  command acton (m for help):n

  command action

  e extended

  p primary partition (1-4)

  e #创建扩展分区,注意一个磁盘只能创建一个扩展区

  partition number (1-4):3
  
  first cylinder (28-522,default 28):28

  last cylinder ...(28-522,default 522):522 #将剩余空间全部分给扩展分区

  扩展分区是不能直接使用的,必须在其上创建逻辑分区!

  command acton (m for help):n

  command action

  l logical (5 or over) #逻辑分区

  p primary partition (1-4)
  
  l

  first sylinder (28-255,default 28):28 #在扩展分区里建逻辑分区

  last cylinder ...(28-522,default 522):522 #柱面用尽,等于说只建一个逻辑分区

  command acton (m for help):w #保存退出

  转换分区类型:

  command acton (m for help):t #转换分区类型

  partition number (1-4):2 #选择第二个主分区
  
  hex code (type L to list codes):82 #按L可列出分区类型所对应的编码

  格式化与挂载: (挂载目录可以自行创建也可指定存在的空目录)

  mksf.ext3 /dev/sdb1 把第二块硬盘的第一个主分区格式化为ext3

  mkswap /dev/sdb2 初始化swap区,此区不可格式化。

  mount /dev/sdb1 /mnt/d #将第一个分区挂载到d这个目录

  重启后自动挂载:vi /etc/fstab
  
  添加:/dev/sdb1 /mnt/d ext3 default 0 0

添加新硬盘挂载

1
2
3
4
5
6
fdisk -l 查看新硬盘
mksf.ext4 /dev/xvdb 格式化新硬盘
mkdir /data 添加目录
mount /dev/xvdb /data 挂载硬盘
vi /etc/fstab 修改添加下面一条记录,开机自动挂载
/dev/xvdb /data ext4 defaults 0 0