Iawen's Blog

我喜欢这样自由的随手涂鸦, 因为我喜欢风......

1. U盘安装 CentOS

进入启动安装系统的界面, 将光标移至Install CentOS 7 那行, 然后按e键, 看到如下行:

linuxefi /images/pxeboot/vmlinuz inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 xdriver=vesa quiet

# 将之更改为
linuxefi /images/pxeboot/vmlinuz linux dd quiet

# Ctrl+x 启动后, 查看系统U盘
# 重启后修改之前的行, 如: 
linuxefi /images/pxeboot/vmlinuz inst.stage2=hd:/dev/sdc4 quiet

2. 分区方案描述

MBR 分区使用 fdisk 分区, GPT 分区表使用 gdisk 分区!

2.1 必须的分区

2.1.1 boot分区

作用: 引导分区, 包含了系统启动的必要内核文件, 即使根分区顺坏也能正常引导启动 一般这些文件所占空间在200M以下,
分区建议: 分区的时候可选100M-500M之间,如果空间足够用, 建议分300-500M.避免由于长期使用的冗余文件塞满这个分区.
分区格式: 建议ext4, 按需求更改

2.1.2 /分区(根分区)

作用: 所有的文件都从这里开始, 你可以比喻为Windows的C盘, 但其实有区别.如果你有大量的数据在根目录下(比如FTP等)可以划分大一点的空间
分区建议: 建议15G以上.看需求, 根分区和home分区的大小就类似C盘和D盘的空间分布一样, 主要占空间在哪儿就在那里分大容量
分区格式: 建议ext4, 按需求更改

2.1.3 swap分区(可以不要)

作用: 类似于Windows的虚拟内存, 在内存不够用时占用硬盘的虚拟内存来进行临时数据的存放, 而对于linux就是swap分区
分区建议: 建议是物理内存大小的2倍, 比如你电脑是4G的物理内存, swap分区可以是8G
分区格式: swap格式

2.2 可选的分区

2.2.1 home分区

作用: 存放用户数据, HOME的结构一般是 HOME/userName/userFile, 如果不分则默认在/目录下
分区建议: 如果用户数据多可以将此分区适当增大, 请参考"根分区"分区建议; 一般硬盘的主要容量几乎都在Home分区和根分区下
分区格式: 建议ext4, 按需求更改

2.2.2 var分区

作用: 用于log日志的文件的存放, 如果不分则默认在/目录下
分区建议: 如果你安装的linux是用于服务器或者经常做日志分析, 请划分var分区, 避免日志文件不断膨胀塞满导致根分区而引发问题.
分区格式: 建议ext4, 按需求更改

2.3 磁盘划分

2.3.1 逻辑卷管理LVM

逻辑卷管理LVM是一个多才多艺的硬盘系统工具.无论在Linux或者其他类似的系统, 都是非常的好用.传统分区使用固定大小分区, 重新调整大小十分麻烦.但是, LVM可以创建和管理"逻辑"卷, 而不是直接使用物理硬盘.可以让管理员弹性的管理逻辑卷的扩大缩小, 操作简单, 而不损坏已存储的数据.可以随意将新的硬盘添加到LVM, 以直接扩展已经存在的逻辑卷.LVM并不需要重启就可以让内核知道分区的存在.
LVM使用分层结构, 如下图所示.
1

图中顶部, 首先是实际的物理磁盘及其划分的分区和其上的物理卷(PV).一个或多个物理卷可以用来创建卷组(VG).然后基于卷组可以创建逻辑卷(LV).只要在卷组中有可用空间, 就可以随心所欲的创建逻辑卷.文件系统就是在逻辑卷上创建的, 然后可以在操作系统挂载和访问.

  • 1.查看磁盘文件可用空间df -Th
  • 2.查看磁盘空间对的详细信息fdisk -l
  • 3.创建磁盘分区, 使用‘8e’类型来使其可用于LVM fdisk /dev/sdb
  • 4.创建物理卷
# <=2T
fdisk /dev/sdb
Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 
First sector (2048-41943039, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): 
Using default value 41943039
Partition 1 of type Linux and of size 20 GiB is set

Command (m for help): t
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'

Command (m for help): w
The partition table has been altered!

pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created
  • 5.检查物理卷的创建情况 pvdisplay
  • 6.扩展卷组
vgextend centos /dev/sdb1
Volume group "centos" successfully extended
  • 7.查看卷组 vgdisplay
  • 8.扩展lvm卷
lvextend -l +100%FREE /dev/mapper/centos-root
Size of logical volume centos/root changed from 35.47 GiB (9080 extents) to 185.50 GiB (47489 extents).
Logical volume root successfully resized.
  • 9.扩展容量
xfs_growfs /dev/mapper/centos-root

# 如果提示: is not a mounted XFS filesystem
# 可以先查看格式:  
df -Th /dev/mapper/centos-root
Filesystem              Type  Size  Used Avail Use% Mounted on
/dev/mapper/centos-root ext4   14G   12G  1.2G  91% /

# 如果是 ext4, 则: 
resize2fs /dev/mapper/centos-root

# aws
growpart /dev/nvme0n1p1 1
resize2fs /dev/nvme0n1p1
  • 10.查看磁盘空间, 可以看到扩容成功 df -h

2.3.2 挂载大硬盘

# 用part命令对3T硬盘进行分区处理

parted /dev/sdb 
GNU Parted 3.1
使用 /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt                                                      
警告: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to continue?
是/Yes/否/No? yes                                                         
(parted) unit TB                                                          
(parted) mkpart
分区名称?   []? sdb01                                                     
文件系统类型?   [ext2]? ext4                                              
起始点?  0                                                                
结束点?  3                                                                
(parted) print                                                            
Model: ATA ST3000DM007-1WY1 (scsi)
Disk /dev/sdb: 3.00TB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name   标志
 1      0.00TB  3.00TB  3.00TB               sdb01

(parted) quit                                                             
信息: You may need to update /etc/fstab.

# 进行格式化分区
mkfs.ext4 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
183148544 inodes, 732566272 blocks
36628313 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=2881486848
22357 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
        102400000, 214990848, 512000000, 550731776, 644972544

Allocating group tables: 完成                            
正在写入inode表: 完成                            
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成   

# 将硬盘挂载到文件夹下
mkdir /home/sdb1
mount /dev/sdb1 /home/sdb1

# 查看UUID
blkid  /dev/sdb1 

# # 开机自动挂载
/dev/sdb1: UUID="0ee05195-5896-426b-8b5a-36e8209dde4a" TYPE="ext4" PARTLABEL="sdb01" PARTUUID="bf347ed3-dc75-4de5-9608-df22d4ee3f2b"

# 编辑 /etc/fstab 文件, 最后插入
UUID=0ee05195-5896-426b-8b5a-36e8209dde4a   /data   ext4    defaults        1 1

2.3.4 交换分区

通过临时使用交换分区来解决内存不足问题:

sudo dd if=/dev/zero of=/swapfile bs=64M count=16
# count的大小就是增加的swap空间的大小, 64M是块大小, 所以空间大小是bs*count=1024MB
 
sudo mkswap /swapfile
# 把刚才空间格式化成swap格式
 
sudo swapon /swapfile 
# 使用刚才创建的swap空间

# 在编译完成后, 最好可以关闭(释放)交换空间
sudo swapoff /swapfile
sudo rm /swapfile

之后继续执行你的相关操作就可以了…

2.4 挂载硬盘

# aws
sudo mkfs -t xfs /dev/xvdf
sudo mkfs -t xfs /dev/nvme1n1

sudo mkdir /data
sudo chown ubuntu. -R /data
sudo mount /dev/xvdf /data

3. 升级内核

# 这步必须要执行的, 要得到Key
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

# http://elrepo.reloumirrors.net/kernel/el7/x86_64/RPMS/    //官方源
# yum install -y http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm  //添加源
# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
yum install -y https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm 
# yum install https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm # CentOS 8


# 下载对应内核文件并安装
# https://elrepo.org/linux/kernel/el7/x86_64/RPMS/
yum --enablerepo=elrepo-kernel install kernel-ml
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg

# vi /etc/default/grub
修改成 GRUB_DEFAULT=0 # GRUB_DEFAULT=saved

# grub2-mkconfig -o /boot/grub2/grub.cfg   //重新编译内核启动文件, 以后升级完内核也要执行一次

删除旧内核
# rpm -qa | grep kernel
yum autoremove kernel-3.10.0-327.el7.x86_64

4. 相关信息汇总

4.1 进程状态

标志 说明
R 运行中
S 睡眠, 该进程未运行; 相反, 它正在等待事件, 例如按键或网络数据包.
D 不间断的睡眠. 进程正在等待I/O, 例如磁盘驱动器.
T 进程已经停止
Z 已失效或"僵尸"进程. 这是一个子进程, 已终止但尚未被其父进程清除
< 高优先级的过程. 可以赋予进程更多的重要性, 使其在CPU上有更多的时间. 流程的此属性称为"好". 据说具有较高优先级的进程不太好, 因为它占用了更多的CPU时间, 而对其他人的占用却更少
N 低优先级的过程. 具有较低优先级的进程(“不错"的进程)只有在为其他具有较高优先级的进程提供服务之后才能获得处理器时间.

4.2 Package 管理攻击集

Commands Debian Fedora, Red Hat Enterprise Linux, CentOS
Low-Level Tools dpkg rpm
High-Level Tools apt, apt-get,aptitude yum, dnf
在存储库中查找软件包 apt-get update; apt-cache search search_string yum search search_string
从存储库安装软件包 apt-get update; apt-get install package_name yum install package_name
从软件包文件安装软件包 dpkg -i package_file rpm -i package_file
移除软件包 apt-get remove package_name yum erase package_name
更新软件包 apt-get update; apt-get upgrade yum update
从包文件升级包 dpkg -i package_file rpm -U package_file
列出已安装的软件包 dpkg -l rpm -qa
确定是否安装了软件包 dpkg -s package_name rpm -q package_name
显示有关已安装软件包的信息 apt-cache show package_name yum info package_name
查找哪个软件包安装了文件 dpkg -S file_name rpm -qf file_name

4.3 Linux Storage Device Names

Pattern Device
/dev/fd* 软盘驱动器
/dev/hd* 较旧系统上的IDE(PATA)磁盘
/dev/lp* 打印机
/dev/sd* SCSI磁盘
/dev/sr* 光盘驱动器(CD / DVD读取器和刻录机)

5. 系统优化

5.1 修改当前的最大打开文件数

echo -e "ulimit -SHn 51200" >> /etc/rc.local
echo -e "ulimit -SHn 51200" >> /etc/profile
echo -e "* soft nofile  51200" >> /etc/security/limits.conf
echo -e "* hard nofile  51200" >> /etc/security/limits.conf

# 避免内存交换
echo -e "* - memlock unlimited"/etc/security/limits.conf
source /etc/profile

vim /etc/sysctl.conf
# set socker buffer -> 16MB 
net.core.rmem_default=16777216
net.core.rmem_max=16777216

# net.core.wmem_default=
# net.core.wmem_max=131072

# TCP socket buffer
# net.ipv4.tcp_wmem

# 内存分配: 0,内核猜测 1,满足所有 2,分配的虚拟地址空间最多不超过交换空间与一小部分过度分配的和
vm.overcommit_memory = 2 # 一定要先设置交换分区 !!!

# 禁用 透明大页
echo never > /sys/kernel/mm/transparent_hugepage/enabled

# 查看当前脏页数量
cat /proc/vmstat | grep "dirty|writeback"

5.2 系统时间不正确时的设置

# 设置硬件时间要依赖与操作系统时间!
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ntpdate cn.pool.ntp.org
clock -w
hwclock --show
hwclock --hctosys

时间相关: timedatectl

5.3 数据库环境

通常, 无论读或写的时候, 操作系统会更新文件的atime。 在数据库环境中, 这些都会带来许多不必要的工作, 可以通过禁用更新文件的最后访问时间 atime 来提示性能:

vim /etc/fstab

/dev/mapper/centos-root                     /       xfs     noatime        0 0

5.4 单用户维护模式

# 开机进入引导界面
# 按e, 末尾添加 rw init=/sysroot/bin/sh , 然后: Ctrl+x
umount /dev/mapper/centos-root
xfs_repair /dev/mapper/centos-root
xfs_repair -L /dev/mapper/centos-root # 慎用

5.5 I/O 优化

5.5.1 系统 I/O 调度算法

dmesg | grep -i scheduler

cat /sys/block/sdb/queue/scheduler
[mq-deadline] kyber bfq none

5.5.2 磁盘预读

blockdev --getra /dev/sda
/usr/sbin/blockdev --setra 16384 /dev/sda # OR
echo 16384 > /sys/block/sda/queue/read_ahead_kb

6. 系统权限

6.1 文件夹权限的设置和修改

  • SUID、GUID 及 SBIT
    4 为 SUID 或 u+s
    2 为 SGID 或 g+s
    1 为 SBIT 或 o+t

  • 如果是对文件和文件夹权限的修改是一样的, 那么可以加-R

chmod -R xxx * 或 chmod -R u+x *(这里的u代表当前用户权限, 还有组和其他分别为g,o)
  • 如果是要对文件和文件夹分别对待, 那么可以用find命令查找
文件: find . -type f  | xargs -i chmod 644 {} 
目录: find . -type d  | xargs -i chmod 777 {}

6.2 selinux相关

6.2.1 关闭

A、永久方法 – 需要重启服务器
修改/etc/selinux/config文件中设置SELINUX=disabled , 然后重启服务器.
B、临时方法 – 设置系统参数
使用命令setenforce 0

setenforce 1 设置SELinux 成为enforcing模式
setenforce 0 设置SELinux 成为permissive模式

7. 硬件信息

7.1 在Ubuntu系统下, 想要查看内存槽的数目及内存的信息, 可采用dmidecode的相关命令来实现, 避免了拆开机箱肉眼查看的方法.

# 查看内存槽的数目、哪个槽位插了内存以及内存的大小
sudo dmidecode|grep -P -A5 "Memory\s+Device"|grep Size|grep -v Range

# 查看最大支持的内存容量.
sudo dmidecode|grep -P 'Maximum\s+Capacity'

# 查看内存槽上内存的速率, Unknown表示该位置未插内存条.
sudo dmidecode|grep -A16 "Memory Device"|grep 'Speed'

7.2 查看不到新增加的硬盘

ls /sys/class/scsi_host/
host0  host1  host2
echo "- - -" > /sys/class/scsi_host/host0/scan
echo "- - -" > /sys/class/scsi_host/host1/scan
echo "- - -" > /sys/class/scsi_host/host2/scan
fdisk -l

7.3 挂载NTFS文件系统

mount -t ntfs-3g /dev/sdb /mnt/usb/

8. 系统更新

8.1 CentOS

8.1.1 下载repo文件

# ali
wget http://mirrors.aliyun.com/repo/Centos-7.repo

# tsinghua 使用方法
# 对于 CentOS 7
sudo sed -e 's|^mirrorlist=|#mirrorlist=|g' \
    -e 's|^#baseurl=http://mirror.centos.org/centos|baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos|g' \
    -i.bak \
    /etc/yum.repos.d/CentOS-*.repo

# 对于 CentOS 8
sudo sed -e 's|^mirrorlist=|#mirrorlist=|g' \
    -e 's|^#baseurl=http://mirror.centos.org/$contentdir|baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos|g' \
    -i.bak \
    /etc/yum.repos.d/CentOS-*.repo

8.1.2 备份并替换系统的repo文件

cp Centos-7.repo /etc/yum.repos.d/ 
cd /etc/yum.repos.d/ 
mv CentOS-Base.repo CentOS-Base.repo.bak 
mv Centos-7.repo CentOS-Base.repo

8.1.3 执行yum源更新命令

yum clean all 
yum makecache 
yum update

8.1.4 补丁查看

# 全部可用的补丁
yum updateinfo list available
 
# 列出全部可用的安全补丁但不安装
yum updateinfo list security all

# 要显示所有待安装的安全补丁: 
yum updateinfo list security all | grep -v "i"
 
# 可以安全补丁
yum --security check-update
 
# 你想检查一下系统已安装的软件有没有bugs及相应补丁包的话, 可以用下面的命令, 
yum list-security bugzillas

# 使用infor-security能了解更详细的补丁信息, 如: 
yum info-security RHSA-2009:1148-1

# 如果我们想列出关于Bugzilla 3595、CVE CVE-2009-1890和建议RHSA-2009:1148-1的清单, 可以使用下面的命令: 
yum --bz 3595 --cve CVE-2009-1890 --advisory RHSA-2009:1148-1 info updates

# 如何一次性安装系统安全更新呢? 呵呵, 也是一个命令: 
yum update --security

8.2 Ubuntu

# 升级安装包相关的命令,刷新可安装的软件列表(但是不做任何实际的安装动作)
sudo apt-get update

# 进行安装包的更新(软件版本的升级)
sudo apt-get upgrade

# 进行系统版本的升级(Ubuntu版本的升级)
sudo apt-get dist-upgrade

# Ubuntu官方推荐的系统升级方式,若加参数-d还可以升级到开发版本,但会不稳定
sudo do-release-upgrade

# 清理旧版本的软件缓存
sudo apt-get autoclean

# 清理所有软件缓存
sudo apt-get clean

# 删除系统不再使用的孤立软件
sudo apt-get autoremove

9. 系统用户及组、服务

  • 可删除的用户, 如 adm, lp, sync, shutdown, halt, news, uucp, operator, games, gopher 等.
  • 可删除的组, 如 adm, lp, news, uucp, games, dip, pppusers, popusers, slipusers 等.
  • 下面这些服务一般情况下是不需要的, 可以选择关闭:
anacron、auditd、autofs、avahi-daemon、avahi-dnsconfd、bluetooth、cpuspeed、firstboot、gpm、haldaemon、hidd、ip6tables、ipsec、isdn、lpd、mcstrans、
messagebus、netfs、nfs、nfslock、nscd、pcscd portmap、readahead_early、restorecond、rpcgssd、rpcidmapd、rstatd、sendmail、setroubleshoot、yppasswdd 
ypserv

10. 系统服务

10.1 通用

开机之后会执行/etc/rc.local文件中的脚本, 所以我们可以直接在/etc/rc.local中添加启动脚本。
CentOS 7 默认 /etc/rc.d/rc.local 是没有执行权限, 所以需要手动调整:

chmod +x /etc/rc.d/rc.local

systemctl status xxxx
systemctl start xxxx
systemctl stop xxxx

10.2 CentOS

# copy file *.service to /usr/lib/systemd/system 目录下

# copy script to /etc/init.d 目录下,  然后执行
chmod +x /etc/init.d/php7-fpm
chkconfig --add php7-fpm
chkconfig --level 2345 php7-fpm on

10.3 Ubuntu

# /lib/systemd/system/

#添加/ 删除服务
sudo update-rc.d php7-fpm defaults
sudo update-rc.d -f php7-fpm remove