linux 学习3-内存与磁盘 ftp nfs nas

120 阅读9分钟

1.内存命令

# free  内存
free
free -m # 以m为单位
free -g # 以g为单位

# top 整体情况
top 

2.磁盘命令

# fdisk  磁盘使⽤率的查看 
ll /dev/vda? # 显示当前支持分区的扩展硬盘
fdisk -l # 查看 分区信息
parted -l # 看未分区的硬盘格式
df -h # 硬盘挂载情况

# parted  用于格式容量超大的区,如10T
parted /dev/vda 

3.文件系统概念

常⻅⽂件系统

ext4 ⽂件系统

ext4 ⽂件系统基本结构⽐较复杂

xfs⽂件系统

常⻅配置⽂件

/etc/fstab

交换分区

# 增加交换分区的⼤⼩
# swapon  
mkswap /dev/vdb1 # 创建交换分区
swapon /dev/vdb1 #  开启
free -m
swapoff /dev/vdb1 # 关闭
free -m

# 自己创建自动文件做交互分区
dd if=/dev/zero bs=4M count=1024 of=/swapfile # 写入测试文件
mkswap /swapfile # 设置交换分区
# 配置
vi /etc/fstab   
/swapfile swap swap defaults 0 0  # 设置交换分区

超级块

  • 在ext4 的文件头记录了 ext4 的文件数量,大小,所以du才计算这么快
  • 每次修改内容都会更新超级快

超级块副本

用于当超级块出问题,用来恢复还原的

i 节点(inode)

记录每一个文件名称 大小 编号,权限信息(文件名记录在父目录的i节点)

ls -l # 查看 文件信息
ls -i # 查看文件的i节点 的编号

touch afile
ls -li afile
echo 123 > afile
ls -li afile # 节点id不变


cp afile bfile
ls -li bfile  # afile 和 bfile节点id不一样
mv afile afile2 # afile2 依然不变
# 当再同一个文件系统做mv 移动 速度很快,因为移动的只是 目录i节点的文件名称的关系

vim afile # 修改内容后 id变化,原理vim 会创建临时文件.afile.swp 临时文件保存后再写入新文件
echo 'xx' > afile # 修改内容后 id不变化,所以建议用这种性能更优
rm afile # 删除速度很快,因为只是断开了i节点和文件名的关系,没有数据块

数据块(datablock)

  • 实际数据存储在 datablock
  • 当内容过大的时候,每一块datablock 会继续穿件连接点,连接下一个数据块,形成火车列的效果
# 符号链接与硬链接
# facl
# 查看权限
getfacl afile
# 设置符号链接用户权限
setfacl -m u:userl:r afile
# 设置符号链接用户组权限
setfacl -m g:groupl:r afile
# 取消权限
setfacl -x u:user1:r afile

ln 链接

把i节点 和 数据块做连接, 不能用在跨域分区


ln afile cfile # 把cfile 也链接到 afile的i节点上
# 72881 -rw-r--r-- 2 root root 4 Mar  2 22:50 afile
# 72881 -rw-r--r-- 2 root root 4 Mar  2 22:50 cfile

ls -l -i afile cfile # 两个文件指向同一个i节点
 
# ln 软连接/符号连接文件 记录的是另外一个文件的文件地址
ln -s afile cfile  # 软连接,生成不一样的i节点 
# 72881 -rw-r--r-- 1 root root 4 Mar  2 22:50 afile
# 75060 lrwxrwxrwx 1 root root 5 Mar  2 22:54 cfile -> afile
# 被连接的cfile 设置权限没有意义,都是按原连接afile权限为主

RAID 与软件 RAID 技术

# RAID 的常⻅级别及含义
RAID 0 striping # 条带⽅式,提⾼单盘吞吐率
RAID 1 mirroring # 镜像⽅式,提⾼可靠性
RAID 5 # 有奇偶校验
RAID 10 # 是RAID 1 与 RAID 0 的结合

# 安装
yum install mdadm
# 创建RAID
mdadm -C /dev/md0 -a yes -l 0 -n 2 /dev/vdb{1,2}
#  删除
mdadm -D /dev/md0 

echo DEVICE /dev/vd[a,b]1 >> /etc/mdadm.conf
mdadm -Evs >> /etc/mdadm.conf
mkfs.xfs /dev/md0 # 格式化

du

disk usage

du # 显示当前递归所有文件大小
du -sh # 统计当前文件夹
du -sh * # 统计当前所有子文件夹

# 用于显示目录或文件的大小
echo 'xxx' > bfile
ls -lh bfile # 查看文件大小 统计的是i节点信息
du bfile # 查看实际占用的空间大小 ,统计的是数据块大小

空洞文件

  • 如虚拟机创建30g的空洞文件虽然ls -lh 显示是30g ,但实际中间插的是空洞文件
  • 用du 显示则很小
# dd 插入连续空间 
dd if=/dev/zero bs=4M count=10 of=afile  # 按字节把从afile  依次按照4m读取,并重复count次写入bfile  , /dev/zero 读出来是无穷多个0 是一个足够大的文件 
ls -lh afile # 都是40m 没有空洞
du -h afile # 都是40m 没有空洞

# seek参数 空洞
dd if=/dev/zero bs=4M count=10 seek=20 of=bfile # seek跳过20块 也就是多了 20*4m = 80m  
ls -lh bfile # 120m 有空洞
du -h bfile # 40m 没有空洞

⽤户磁盘配额 quota

umount /dev/vdb1 # 如果已经挂载要先卸载
mkfs.xfs /dev/vdb1 -f
mkdir /data
mount -o uquota,gquota /dev/vdb1 /data
chmod 1777 /data
xfs_quota -x -c 'report -ugibh' /data # 查看使用情况
xfs_quota -x -c 'limit -u isoft=5 ihard=10 user1'  /data # 限制用户的创建数量等
xfs_quota -x -c "state" /data # 查看状态

# 关闭取消限制 
rm -f /etc/projects;rm -f /etc/projid     ##删除项目配额相关文件
umount /data                              ##卸载
vi /etc/fstab                             ##重新设置成常规的挂载
/dev/sdb3 /data xfs defaults 0 0 

4.系统综合状态查询

sar


sar -u 1 10
sar -r 1 10
sar -b 1 10
sar -d 1 10
sar -q 1 10

iftop

使⽤第三⽅命令查看⽹络流量

yum install epel-release
yum install iftop
iftop -P

5.例子

完整分区例子

# 查看磁盘
lsblk
# fdisk分区
fdisk /dev/sdb
# 输入 m n p 1 回车 回车 m w

# 查看分区   
lsblk -f
# 格式化
mkfs -t ext4 /dev/sdb1
# 查看分区   
lsblk -f
# mount 设备名称 挂载目录
mount /dev/sdb1 /home/new
# 检查是否成功
df -Th 
# 永久挂载
# 查看唯一UUID

blkid /dev/sdc1
# 编辑配置 
vi /etc/fstab
# 输入下面内容
# UUID/磁盘路径 挂载点 磁盘类型 defaults 0 0
/dev/vdb1 /data ext4 defaults 0 0

# 查看挂载是否正常
mount -a
# 查看挂载是否正常
df -Th

逻辑卷管理 创建例子


## 逻辑卷管理
# 整个流程
fdisk -> dev/sd?? -> pv -> vg1 -> lv1 ->  xfs -> mount # 显示挂载

# 安装
yum install lvm2

# 创建逻辑卷
pvcreate /dev/sd[b,c,d]1 
# 
pvcreate /dev/vdb2
# 查看创建 pv pvdisplay
pvs  

# 创建vg 
vgcreate myvg /dev/vdb2
# 查看vg  或者 vgdisplay
vgs  
# vg扩展
vgextend myvg /dev/vdb3

# 创建lv
lvcreate -L 100M -n mylv myvg
# 查看lv lvdisplay
lvs # 查看 列表

# 扩展lv 
lvextend -L 500M /dev/myvg/mylv 
# 缩减
lvreduce -L 50M /dev/myvg/mylv 

# 检查
mount | grep root
pvs
 
# 查看挂载文件夹情况
df -Th

# 动态扩展当前vg 组 添加分区
vgextend centos /dev/sdd1
# 卷信息,需要主动刷新超级快的内容 才能统计到最新
xfs_growfs /dev/centos/root

6.FTP 服务

FTP模式

主动模式和被动模式

vsftpd

服务安装和启动

# 安装 与 启动
yum install vsftpd ftp -y
systemctl start vsftpd.service
# 默认 自动创建 ftp 用户做ftp的账号 
ftp # 用户名
ftp # 密码

# 自己创建账号 
useradd user1 # 创建用户 
passwd user1  # 设置密码 12345678

# 登录
ftp localhost
# 输入用户名  ftp
# 输入密码  ftp 

# 查看服务器列表
ls # /var/ftp/ 这个是ftp服务器上的文件夹默认地址
# 查看本地列表
!ls  #使用 

# 如果是 使用 user1 登录 
ls # /home/user1/ user1用户的文件夹

# 上传文件 
put a.txt 
# 下载
get a.txt

# 建议将 selinux 改为 permissive
vi /etc/selinux/config
SELINUX=permissive

# getsebool # 查询SElinux策略
getsebool -a | grep ftpd 
# setsebool 设置策略 
setsebool -P ftpd_use_nfs 1

服务配置文件

vi /etc/vsftpd/vsftpd.conf
# 需要打开

allow_writeable_chroot=YES # 解决无法登录
# chroot_local_user=YES # 是否指定根文件夹 默认不打开 不然用户可以访问系统文件夹 
anonymous_enable=YES
local_enable=YES
write_enable=YES

dirmessage_enable=YES
xferlog_std_format=YES
connect_from_port_20=YES

listen=NO
listen_ipv6=YES

pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES


# 配置firewall 防火墙
firewall-cmd --add-service ftp  # 添加ftp服务
firewall-cmd --list-all # 查看是否生效

# 配置系统自带配置用户
# /etc/vsftpd/vsftpd.conf 设置 userlist_deny=NO/YES 是白名单 还是黑名单 
userlist_deny=NO # /etc/vsftpd/ftpusers 上面的名单都不给登录
userlist_deny=YES # 只允许 /etc/vsftpd/user_list 上用户登录 

使用虚拟用户

## 使用虚拟用户进行验证 
# 新增 vuser用户
useradd vuser -d /data/ftp -s /sbin/nologin
grep vuser /etc/passwd

cd /etc/vsftpd/
vim vuser.temp
u1
123456
u2
123456
u3
123456

# 加载临时文件 生成 db
db_load -T -t hash -f /etc/vsftpd/vuser.temp /etc/vsftpd/vuser.db
ll /etc/vsftpd/vuser.db
chmod 600 /etc/vsftpd/vuser.db
# 默认配置
vi /etc/pam.d/vsftpd
# 自定义配置
vi /etc/pam.d/vsftpd.vuser
# 更新db=/etc/vsftpd/vuser
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser


vi /etc/vsftpd/vsftpd.conf
# 更新
guest_enable=YES # 是否允许访客
guest_username=vuser # 新增访客用户
allow_writeable_chroot=YES # 限制用户跳出当前目录
pam_service_name=vsftpd.vuser # 新增vsftpd.vuser
#pam_service_name=vsftpd # 注释原来的 pam_service_name
user_config_dir=/etc/vsftpd/vuserconfig

# 配置自定访客用户的权限 u1
cd /etc/vsftpd/vuserconfig

vi u1
local_root=/data/ftp
write_enable=YES
anon_umask=022
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
download_enable=YES
# 重启
systemctl restart vsftpd.service

Samba

支持window 和 linux 连接

## Samba 服务安装
yum install samba cifs-utils -y #cifs-utils必须安装,不然不能mount
## Samba 服务配置文件
vi /etc/samba/smb.conf
[share]
 comment = my share
 path=/data/share
 read only = No

## Samba 用户的设置
# smbpasswd 命令
-a # 添加用户
-x # 删除用户
# pdbedit
-L # 查看用户
## Samba 服务的启动
systemctl start smb.service


### Linux 客户端终端1 访问  #cifs-utils必须安装,不然不能mount
mount -t cifs -o username=user1 //127.0.0.1/user1 /mnt
# 挂载后 本地的 /mnt  和 服务器上的 /home/user1 保持同步
ls /mnt # 本地的
# 等价于
ls /home/user1/ # 服务器的 


### Windows 客户端
- 资源管理器访问共享
- 映射网络驱动器

# 例子1
cd /etc/samba
man 5 smb.conf
vi smb.conf
# 创建用户
useradd user1
passwd user1
# smb 设置用户同时设置密码
smbpasswd -a user1  # 输入smb新密码
# 检查
pdbedit -L
# 启动服务
systemctl start smb.service

# 注意挂载的 /mnt 需要提前格式化
mkfs -t ext4 /dev/vdb1
mount /dev/vdb1 /mnt
# 挂载
mount -t cifs -o username=user1 //127.0.0.1/user1 /mnt
# 解绑
umount /mnt
ls /data/share/

NFS

## NFS 服务的配置和启动
# 安装 
yum -y install rpcbind nfs-utils -y
systemctl stop firewalld # 关闭防火墙 
setenforce 0 # 关闭SELinux

# 配置共享文件夹
vi /etc/exports
/data/share *(rw,sync,all_squash)

# 启动NFS 服务
systemctl start nfs.service
#测试启动是否有效
showmount -e localhost

# linux 客户端使用挂载方式访问
mount -t nfs localhost:/data/share /mnt

touch /mnt/test1 #创建的用户权限是 nfsnobody

# window 客户端使用挂载方式访问
mount  171.35.40.133:/data/share E: 

7.完整NAS搭建

  • NAS(Network Attached Storage) 网络附属存储
  • NAS 支持的协议 NFS、CIFS、FTP
  • 保证数据安全方式 磁盘阵列

搭建流程: 先创建RAID ,再创建逻辑卷,最后再按3个ftp服务

yum install mdadm lvm2 -y
# 创建RAID
mdadm -C /dev/md0 -a yes -l 0 -n 2 /dev/vdb{1,2} 
# 输入 yes
# 查看md0配置信息
mdadm --detail --scan --verbose
# md0配置信息 持久化
mdadm --detail --scan --verbose > /etc/mdadm.conf
# 创建 pv 
pvcreate /dev/md0
pvs  
# 创建 vg 
vgcreate vg1 /dev/md0
vgs   
# 创建lv
lvcreate -L 3G -n mylv1 vg1
lvs
# 格式化
mkfs.xfs /dev/vg1/mylv1 
# 持久化挂载
echo '/dev/vg1/mylv1 /share xfs defaults 0 0' >> /etc/fstab
# 检查
mount | grep share

# 设置 vsftpd
# 创建用户
useradd shareuser -d /share/shareuser
# 设置密码
echo 123456 | passwd --stdin shareuser
# 重启
systemctl restart vsftpd 


# 设置 samba
yum install samba cifs-utils -y  
# 启动
systemctl start smb.service
# smb密码文件
vi smbpass.tmp
123456
123456
smbpasswd -s -a shareuser < smbpass.tmp
# 查看是否生效
pdbedit -L

vi /etc/samba/smb.conf
# 设置共享路径
[share]
        comment = my share
        path = /share/shareuser
        read only = No

systemctl restart smb.service


# 设置 nfs
yum -y install rpcbind nfs-utils -y
systemctl stop firewalld # 关闭防火墙 
setenforce 0 # 关闭SELinux
# 配置共享文件夹
vi /etc/exports 
/share/shareuser *(ro) # 添加共享文件夹
# 启动NFS 服务
systemctl start nfs.service
# 设置 share文件夹 额外的facl权限
ls /share/ -l
setfacl -m u:nfsnobody:rwx /share/shareuser
getfacl /share/shareuser


adduser.sh

# 通用配置添加用户配置
vi adduser.sh
pass=123456
# 创建vsftpd 账户信息
useradd $1 -d /share/$1
echo $pass | passwd --stdin $1

# 创建 smb 账户信息
echo $pass > smbpass.tmp
echo $pass >> smbpass.tmp

smbpasswd -s -a shareuser < smbpass.tmp

# 创建 nfs 共享文件夹与权限信息
echo "/share/$1 *(ro)" >>  /etc/exports 

参考

time.geekbang.org/course/intr…