遇见时光

Keep Looking , Don't Settle
Stay Hungry , Stay Foolish

Centos管理笔记

创建用户

1. 创建新用户

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 创建用户名为common_usr1的用户
[root@localhost ~]# adduser common_usr1
# 为新用户设置密码
[root@localhost ~]# passwd common_usr1
# 永久性删除用户账号
[root@localhost ~]# userdel peter
[root@localhost ~]# groupdel peter
# 强制删除该用户的主目录和主目录下的所有文件和子目录
[root@localhost ~]# userdel -rf username

# 查看系统中有哪些用户
[root@localhost ~]# cut -d : -f 1 /etc/passwd
# 查看可以登录系统的用户
[root@localhost ~]# cat /etc/passwd | grep -v /sbin/nologin | cut -d : -f 1

2. 创建用户组

1
2
3
4
5
6
7
8
9
10
# 新建test用户组
[root@localhost ~]# groupadd test
# 为用户组设置密码:
[root@localhost ~]# gpasswd test
# 新建用户同时增加工作组
[root@localhost ~]# useradd -g test phpq
# 给已有的用户增加工作组
[root@localhost ~]# gpasswd -a username groupname
#修改默认的目录所属组别为新的组swgroup
[root@localhost ~]# chgrp swgroup /home/srv1

3. 授权

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
# 为新用户授予使用sudo的权限
[root@localhost ~]# sudoer
bash: sudoers: 未找到命令...
[root@localhost ~]# whereis sudoers
sudoers: /etc/sudoers /etc/sudoers.d /usr/share/man/man5/sudoers.5.gz

# 查看拥有sudo权限的用户
[root@localhost ~]# ls -l /etc/sudoers
-r--r-----. 1 root root 4328 11月 28 2019 /etc/sudoers

#添加修改权限
[root@localhost ~]# chmod -v u+w /etc/sudoers
mode of "/etc/sudoers" changed from 0440 (r--r-----) to 0640 (rw-r-----)
[root@localhost ~]# vim /etc/sudoers
## Allow root to run any commands anywher
root ALL=(ALL) ALL
#这个是新增的用户
common_usr1 ALL=(ALL) ALL

# 收回读写权限并登录
[root@localhost ~]# chmod -v u-w /etc/sudoers
mode of "/etc/sudoers" changed from 0640 (rw-r-----) to 0440 (r--r-----)
[root@localhost ~]# su common_usr1
[common_usr1@localhost ~]$

# 把 /var/run/httpd.pid 的所有者设置 root:
[root@localhost ~]# chown root /var/run/httpd.pid
# 将文件 file1.txt 的拥有者设为 runoob,群体的使用者 runoobgroup :
[root@localhost ~]# chown runoob:runoobgroup file1.txt
# 将/home/admin目录下的所有文件与子目录的拥有者皆设为 runoob,
# 群体的使用者 runoobgroup:
[root@localhost ~]# chown -R runoob:runoobgroup /home/admin

# 还可以通过WinSCP在root下更改文件的属性;选择文件(夹)的拥有者、组和权限


分区扩容

1. 查看分区信息

查看系统分区设备

1
2
3
4
5
6
7
8
9
10
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 1.1T 0 disk
├─sda1 8:1 0 200M 0 part /boot/efi
├─sda2 8:2 0 1G 0 part /boot
└─sda3 8:3 0 1.1T 0 part
├─centos-root 253:0 0 50G 0 lvm /
├─centos-swap 253:1 0 4G 0 lvm [SWAP]
└─centos-home 253:2 0 1T 0 lvm /home
sdb 8:16 0 3.7T 0 disk

查看sdb是否含有数据信息(此时没有)

1
2
3
4
5
6
7
blkid
/dev/sda1: SEC_TYPE="msdos" UUID="4356-DCC4" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="4d6eb8ab-acd6-4f48-9908-398bca19c0a6"
/dev/sda2: UUID="cbb7e05d-a88b-4308-8579-6397843e05fa" TYPE="xfs" PARTUUID="6e746fcd-213a-4f4a-9abe-66fdde143691"
/dev/sda3: UUID="gAm3AP-ud6Z-sWVc-br5j-svWQ-S1Wn-PmjObd" TYPE="LVM2_member" PARTUUID="90ab026e-99ac-4fdd-8af9-206319a4a6f2"
/dev/mapper/centos-root: UUID="f875dbf5-e470-444d-890e-b83fab3173a8" TYPE="xfs"
/dev/mapper/centos-swap: UUID="32fc5b12-0527-43eb-8618-8a1744e2f9a4" TYPE="swap"
/dev/mapper/centos-home: UUID="2e9c3c57-05b0-4b0d-a41a-7dfbe35c2893" TYPE="xfs"

块设备、分区和逻辑卷的详细概述

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
fdisk -l
磁盘 /dev/sdb:4000.2 GB, 4000225165312 字节,7812939776 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):262144 字节 / 262144 字节

WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.

磁盘 /dev/sda:1199.7 GB, 1199705161728 字节,2343174144 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):262144 字节 / 262144 字节
磁盘标签类型:gpt
Disk identifier: A4033C2E-3513-4243-A3F2-D7CAC717ED88


# Start End Size Type Name
1 2048 411647 200M EFI System EFI System Partition
2 411648 2508799 1G Microsoft basic
3 2508800 2343172095 1.1T Linux LVM

磁盘 /dev/mapper/centos-root:53.7 GB, 53687091200 字节,104857600 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):262144 字节 / 262144 字节


磁盘 /dev/mapper/centos-swap:4294 MB, 4294967296 字节,8388608 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):262144 字节 / 262144 字节


磁盘 /dev/mapper/centos-home:1140.4 GB, 1140435451904 字节,2227412992 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):262144 字节 / 262144 字节

2. 管理分区

fdisk函数用于进行创建,管理和删除分区

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
# 创建分区
(base) [root@localhost ~]# fdisk /dev/sdb
命令(输入 m 获取帮助):m
命令操作
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
g create a new empty GPT partition table
G create an IRIX (SGI) partition table
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 verify the partition table
w write table to disk and exit
x extra functionality (experts only)

命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
分区号 (1-4,默认 1):1
起始 扇区 (2048-4294967295,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-4294967294,默认为 4294967294):
将使用默认值 4294967294
分区 1 已设置为 Linux 类型,大小设为 2 TiB

命令(输入 m 获取帮助):w
The partition table has been altered!

# 删除分区
# 删除分区前需要先umount卸载分区
[root@freeman ~]# fdisk /dev/sdb <-进入sdb硬盘

Command (m for help): p <- 输入p打印当前硬盘的分区信息

Disk /dev/sdb: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 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: 0xcca98924

Device Boot Start End Blocks Id System
/dev/sdb1 1 523 4200966 83 Linux
/dev/sdb2 524 537 112455 83 Linux
/dev/sdb3 538 563 208845 5 Extended
/dev/sdb5 538 563 208813+ 83 Linux
/dev/sdb6 409 422 112423+ 83 Linux

Command (m for help): d <- 输入d删除分区
Partition number (1-5): <- 输入要删除的分区编号
...
Command (m for help): w <- 分区删除完毕,输入w,写入磁盘分区表
The partition table has been altered!

3. 挂载分区

格式化分区

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 查看生成的分区
(base) [root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 1.1T 0 disk
├─sda1 8:1 0 200M 0 part /boot/efi
├─sda2 8:2 0 1G 0 part /boot
└─sda3 8:3 0 1.1T 0 part
├─centos-root 253:0 0 50G 0 lvm /
├─centos-swap 253:1 0 4G 0 lvm [SWAP]
└─centos-home 253:2 0 1T 0 lvm /home
sdb 8:16 0 3.7T 0 disk
└─sdb1 8:17 0 2T 0 part

# 格式化分区
(base) [root@localhost ~]# mkfs.xfs -f /dev/sdb1
meta-data=/dev/sdb1 isize=512 agcount=32, agsize=16777216 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=536870655, imaxpct=5
= sunit=64 swidth=64 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=262144, version=2
= sectsz=512 sunit=64 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0

挂载分区

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
# 将/dev/sdb1分区挂载到/home
(base) [root@localhost ~]# mount /dev/sdb1 /home

# 查看分区挂载情况
(base) [root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 94G 0 94G 0% /dev
tmpfs 94G 0 94G 0% /dev/shm
tmpfs 94G 13M 94G 1% /run
tmpfs 94G 0 94G 0% /sys/fs/cgroup
/dev/mapper/centos-root 50G 32G 19G 64% /
/dev/sda2 1014M 202M 813M 20% /boot
/dev/sda1 200M 12M 189M 6% /boot/efi
/dev/sdb1 2.0T 34M 2.0T 1% /home
tmpfs 19G 32K 19G 1% /run/user/1001
tmpfs 19G 12K 19G 1% /run/user/42
tmpfs 19G 0 19G 0% /run/user/1012
tmpfs 19G 0 19G 0% /run/user/1013
tmpfs 19G 0 19G 0% /run/user/1014
tmpfs 19G 0 19G 0% /run/user/1010
tmpfs 19G 0 19G 0% /run/user/0

# 自动挂载
# 打开/etc/fstab在最后添加挂载配置
(base) [root@localhost ~]# vi /etc/fstab

/dev/mapper/centos-root / xfs defaults 0 0
UUID=cbb7e05d-a88b-4308-8579-6397843e05fa /boot xfs defaults 0 0
UUID=4356-DCC4 /boot/efi vfat umask=0077,shortname=winnt 0 0
/dev/mapper/centos-home /home xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
/dev/sdb1 /home xfs defaults 0 0

# 卸载分区
(base) [root@localhost ~]# umount /dev/sdb1

4. 扩容超过2T的磁盘

磁盘格式化

1
2
3
# 如果次硬盘之前有过分区,则需要先进行格式化
mkfs.xfs -f /dev/sdb
mkfs -t ext4 /dev/sdb

使用parted进行GPT格式分区

1
2
3
4
5
6
7
8
9
10
# 对新磁盘进行分区,由于fdisk仅支持2T以内的磁盘分区
(base) [root@localhost ~]# parted /dev/sdb
(parted) help                # 可以查看帮助信息
(parted) mklabel gpt            # 执行命令mklabel gpt,把sdb改成gpt大分区格式
Warning: 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) mkpart primary 0 4001GB     # 创建分区
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? cancel           # 注意,此处提示为磁盘为对齐,会影响性能,所以在此处要进行对齐

查看磁盘参数

1
2
3
4
5
# 开启新进程查看参数
cat /sys/block/sdb/queue/optimal_io_size
cat /sys/block/sdb/queue/minimum_io_size
cat /sys/block/sdb/alignment_offset
cat /sys/block/sdb/queue/physical_block_size

如果optimal_io_size不为0,暂定是1048576,则可以用optimal_io_size的值加上alignment_offset的值,

然后除以physical_block_size的值,就是起始扇区的位置了,如上面的例子中,可以用这个公式算出来起始扇区的设定值:

(1048576 + 0) / 512 = 2048

如果optimal_io_size为0,那么我们最好直接使用起始扇区的默认值2048。


分区设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
(parted) mkpart primary 2048s 100%  
(parted) print
Model: AVAGO MR9361-8i (scsi)
Disk /dev/sdb: 4000GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number Start End Size File system Name 标志
1 1049kB 4000GB 4000GB xfs primary

(parted) align-check optimal 1
1 aligned
(parted) quit

挂载磁盘

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 查看磁盘情况
fdisk -l
# 再次格式化磁盘
mkfs.xfs -f /dev/sdb
mkfs -t ext4 /dev/sdb
# 挂载新磁盘到/mnt
mount /dev/sdb /mnt
# 设置自动挂载
vim /etc/fstab
#写入/etc/fstab
/dev/sdb /mnt xfs defaults 0 0

# 查看是否挂载
df -h
# 挂载fstab中未挂载的磁盘
mount -a
# 再次查看是否挂载
df -h

5. 记/dev/sdb磁盘分割为超2T分区和LVM扩容区

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
# 先进行part分区成超2T区域
parted /dev/sdb
mklabel gpt
mkpart primary 0 3400GB # 创建分区
Ignore/Cancel? cancel           # 注意,此处提示为磁盘为对齐,会影响性能,所以在此处要进行对齐
# 检查硬盘空闲空间
parted /dev/sdb print free
# 调整分区大小
# 例如,我们将要重新调整(增加)分区 3 的结束位置,从 28GB 到 33GB。
# sudo parted [Disk Name] [resizepart] [Partition Number] [Partition New End Size]
sudo parted /dev/sdb resizepart 3 33.0GB

# 确认分区是否已经扩容
sudo parted /dev/sdb print

# 重新调整文件系统大小。
sudo resize2fs /dev/sdb3

# 最后,确认分区是否已经扩容。
df -h /dev/sdb[1-3]

# parted删除分区,例如我们删除3号分区
# sudo parted [Disk Name] [rm] [Partition Number]
sudo parted /dev/sdb rm 3

# parted更改分区标志
# sudo parted [Disk Name] [set] [Partition Number] [Flags Name] [Flag On/Off]
sudo parted /dev/sdb set 2 lvm on

# 验证分区标志
sudo parted /dev/sdb print


# 使用剩余空间创建分区
parted /dev/sdb mkpart primary ext4 (上一个分区结束的位置)GB 100%
print # 查看看分区情况
# 此时sdb应有两个分区sdb1和sdb2
quit

# mkfs格式化分区
mkfs.ext4 /dev/sdb1
mkfs.xfs -f /dev/sdb2

# 将sdb1挂载到/mnt
mount /dev/sdb1 /mnt
# 设置自动挂载
vim /etc/fstab
#写入/etc/fstab
/dev/sdb1 /mnt ext4 defaults 0 0
# 查看是否挂载
df -h
# 挂载fstab中未挂载的磁盘
mount -a
# 再次查看是否挂载
df -h

# 将sdb2挂载到/home; 对/dev/mapper/centos-home进行扩容
# 备份home分区文件
tar cvf /tmp/home.tar /home
umount /home (卸载)
fuser -km /home/(终止)
# 卷扩容,添加进LVM组
lvm
pvcreate /dev/sdb2         # 初始化sdb2分区
vgextend centos /dev/sdb2   # 将初始化过的分区加入到虚拟卷组centos组
vgdisplay -v # 查看逻辑卷情况
lvextend -L +500G(sdb2容量) /dev/centos/home  # 扩展已有卷的容量
# 将/centos-home挂载到/home
mount /dev/mapper/centos-home /home
lsblk # 查看分区设备情况
xfs_growfs /dev/mapper/centos-home # 扩展/home文件系统
df -h # 查看分区挂载情况
reboot



安装 Nvidia 显卡驱动

原博客地址

系统环境

1
2
CentOS Linux release 7.6.1810 (Core)
Linux centos7.6 3.10.0-957.5.1.el7.x86_64 #1 SMP Fri Feb 1 14:54:57 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

检查显卡的识别状况

在执行下述所有步骤之前,必须确保当前系统已经正确识别到 NVIDIA 的显卡,否则在显卡没有被正常识别的情况下,执行后续的安装步骤都是徒劳的。此时可以执行以下命令,若可以输出相关信息,则说明显卡能被系统正常识别。否则请重新插拔显卡,或者检查主板是否需要跳线或者设置 BIOS 才能正确识别独立显卡。

1
# lspci | grep "NVIDIA"

安装软件依赖

1
# yum -y install gcc gcc-c++ wget

安装 NVIDIA 显卡检测工具

1
2
3
4
5
6
7
8
9
10
11
12
13
# 导入key
# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

# 安装elrepo源
# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

# 安装检测工具
# yum install nvidia-detect

# 检测显卡,正常情况下会输出最新且适用当前显卡的驱动程序的版本号信息
# nvidia-detect -v

# 提示:不建议使用rpmfusion安装Nvidia的显卡驱动,因为开源的显卡驱动在性能方面跟Nvidia官方的闭源显卡驱动有一定的差距

下载 NVIDIA 驱动程序

根据显卡检测结果,在 NVIDIA 官网下载对应版本的 Linux 显卡驱动程序。

1
2
# 下载驱动(请自行修改URL中的驱动版本号)
# wget https://us.download.nvidia.cn/XFree86/Linux-x86_64/430.40/NVIDIA-Linux-x86_64-430.40.run

屏蔽系统自带的 Nouveau 显卡驱动

1
2
3
4
5
6
# 通过vim编辑器更改配置文件,按照以下内容进行修改
# vim /lib/modprobe.d/dist-blacklist.conf

blacklist nouveau #添加此行
options nouveau modeset=0 #添加此行
# blacklist nvidiafb #将nvidiafb的这一行注释掉

重建 initramfs image

1
2
3
4
5
# 备份
# mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak

# 重建
# dracut /boot/initramfs-$(uname -r).img $(uname -r)

重启系统

1
2
3
4
5
6
7
8
9
10
# 修改系统运行级别为纯文本模式
# systemctl set-default multi-user.target

# 重启系统
# reboot

# 系统重启完成后,在纯文本模式下使用root用户登录进系统

# 查看nouveau显卡驱动是否已经被禁用,若此命令执行完之后没有输出相关信息,则说明已经被禁用
# lsmod | grep nouveau

安装 NVIDIA 显卡驱动(纯文本模式下)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 文件授权
# chmod +x NVIDIA-Linux-x86_64-384.59.run

# 安装显卡驱动
# ./NVIDIA-Linux-x86_64-384.59.run

# 安装过程中,选择accept;如果提示是否编译DKMS模块,选择yes(方便以后升级系统内核);如果提示要修改xorg.conf,选择yes;

# 查看显卡驱动的安装状态,若此命令执行完之后正常输出显卡状态相关的信息,则说明Nvidia显卡驱动安装成功
# nvidia-smi

# 修改系统运行级别为图形模式
# systemctl set-default graphical.target

# 重启系统
# reboot

# 重启完成后,若成功进入GNOME的桌面环境,执行此命令可以调出图形界面来配置显卡(可选操作)
# nvidia-settings

卸载 NVIDIA 显卡驱动(可选操作)

如果显卡驱动安装和系统重启完成后,无法正常进入 GHOME 的桌面环境,此时可以在另一台机器上通过远程 SSH 使用 root 用户登录进系统,然后手动执行以下命令卸载 NVIDIA 的显卡驱动程序(在纯文本模式下)。特别注意:当 NVIDIA 的显卡驱动被卸载后,需要启用系统自带的 Nouveau 显卡驱动 和 还原 initramfs image,否则系统会因缺少显卡驱动而无法正常显示。

1
# ./NVIDIA-Linux-x86_64-430.40.run --uninstall

系统内核更新问题

如果系统更新内核并重启后,显示器无法显示 GNOME 桌面环境(一般是因为显卡驱动丢失导致显示器无法显示桌面环境,但大多数情况下 Centos 系统已经启动成功),此时可以在另一台机器上通过 SSH 远程登录进旧的 Centos 系统,然后按照上面的步骤重新安装 NVIDIA 的显卡驱动(如果安装程序提示显卡驱动已存在,手动卸载显卡驱动后,再重新安装即可)。

主板启用独立显卡

一般的桌面主板(家用)可以自动检测到独立显卡并启用,但是部分主板(例如服务器主板),则需要在 BIOS 里将板载显卡或者 CPU 的核显屏蔽掉,个别品牌可能需要通过主板跳线的方式屏蔽板载显卡或者 CPU 的核显。超微的服务器主板一般需要在 BIOS 里设置板载显卡的屏蔽,否则独立显卡无法正常识别。启用独立显卡之后,超微的部分服务器主板在系统刚启动的时候,显示器不会显示任何内容(黑屏 + 无信号输出);因为服务器主板开机自检的耗时较长,此时一般需要耐心等待几十秒甚至更久,显示器才会显示硬件自检和系统启动相关的信息。

补充说明

一般情况下,只要 Centos 系统可以正常识别到 NVIDIA 的显卡,同时显示器与 NVIDIA 的显卡正确连接上;那么即使不安装 NVIDIA 的显卡驱动程序,在系统启动的时候,显示器都可以正常显示硬件自检和系统启动相关的信息(可能会延时显示);唯一的问题是在系统正常启动完成后,显示器没办法显示 GNOME 桌面环境。

nvidia-smi 命令输出的信息

nvidia-smi.jpeg



Cuda卸载和安装

原博客地址

一、卸载

1.1 卸载原有驱动

方法一:找到显卡驱动.run文件:

1
$ sh NVIDIA-Linux-x86_64-418.126.02.run --uninstall

方法二:清除所有nvidia相关文件和依赖

1
$ yum remove nvidia-*

为了删除干净还可以(目标就是把nvidia-driver的相关组件都清理掉):

1
2
rpm -qa|grep -i nvid|sort
yum remove kmod-nvidia-*

ubuntu为:

1
2
sudo apt-get purge nvidia-cuda*
sudo apt-get purge nvidia-*

1.2卸载原有cuda

如果是rpm安装

1
2
3
4
sudo rpm -e cuda-repo[补全]        #[补全]为tab键
sudo yum -y remove nvidia-*
sudo yum -y remove cuda-*
sudo rm -rf /usr/local/cuda* #如果有多个cuda,都删除,如rm -rf /usr/local/cuda-11.0

如果是.run安装

1
2
sudo nvidia-uninstall #卸载驱动
sudo /usr/local/cuda/cuda-uninstaller #卸载cuda,9.2版本的后缀名为.pl

反正我是两种都执行一遍.


1.3 清理gcc环境

1
2
3
4
5
6
7
8
9
10
11
12
13
14
sudo yum autoremove -y gcc*
sudo yum autoremove -y cpp*
sudo yum autoremove -y dkms

sudo rm -rf /opt/rh #删除由devtoolset安装的gcc
sudo rm -rf /usr/lib/gcc
sudo rm -rf /usr/libexec/gcc
whereis gcc

sudo yum install -y gcc
sudo yum install -y gcc-c++
sudo yum install -y glibc-devel

gcc -v

二、安装NVIDIA驱动

下载地址:https://www.nvidia.com/Download/index.aspx

1
sudo sh NVIDIA-Linux-x86_64-440.118.02.run

安装过程失败提示:

1
2
An NVIDIA kernel module 'nvidia-uvm' appears to already be loaded in your kernel. This may be because it is in use (for example, by an X server, a CUDA program, or the NVIDIA Persistence Daemon), but this
may also happen if your kernel was configured without support for module unloading. Please be sure to exit any programs that may be using the GPU(s) before attempting to upgrade your driver. If no GPU-based programs are running, you know that your kernel supports module unloading, and you still receive this message, then an error may have occured that has corrupted an NVIDIA kernel module's usage count, for which the simplest remedy is to reboot your computer.

因为一些docker 容器正在使用该驱动,需要输入一下命令:

1
2
3
4
sudo service lightdm stop
sudo stop nvidia-digits-server
sudo service docker stop
sudo rmmod nvidia-uvm

或者需要屏蔽nouveau,以及把docker采用了gpu的已有的服务关闭stop.


屏蔽nouveau

1
sudo vim /etc/modprobe.d/blacklist-nouveau.conf

加入:

1
2
blacklist nouveau
options nouveau modeset=0

更新使其生效

1
sudo update-initramfs -u

修改运行级别为文本模式

1
systemctl set-default multi-user.target

重启

1
sudo reboot

检验是否生效,输入以下命令,如果无信息输出,则生效

1
lsmod | grep nouveau

查看nvidia-smi

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@localhost sbin]# nvidia-smi
Sat Oct 9 14:54:38 2021
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.33.01 Driver Version: 440.33.01 CUDA Version: 10.2 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla V100-FHHL... Off | 00000000:AF:00.0 Off | 0 |
| N/A 55C P0 32W / 150W | 12MiB / 16160MiB | 0% Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+

三、安装cuda

下载地址: https://developer.nvidia.com/cuda-downloads
推荐用runfile(local)方法,会下载到本地


1
2
$ wget http://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda_10.2.89_440.33.01_linux.run
$ sudo sh cuda_10.2.89_440.33.01_linux.run

安装过程输入accept,选择安装所有 [X]表示选中,如果取消就移到该选项按一下回车就取消了X.


如果没有执行第一步的卸载原有驱动,则会出现以下错误:

在执行sh cuda_10.2.89_440.33.01_linux.run时,安装失败,打开日志/var/log/cuda-installer.log:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[INFO]: Driver not installed.
[INFO]: Checking compiler version...
[INFO]: gcc location: /usr/bin/gcc

[INFO]: gcc version: gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.12)

[INFO]: Initializing menu
[INFO]: Setup complete
[INFO]: Components to install:
[INFO]: Driver
[INFO]: 440.33.01
[INFO]: Executing NVIDIA-Linux-x86_64-440.33.01.run --ui=none --no-questions --accept-license --disable-nouveau --no-cc-version-check --install-libglvnd 2>&1
[INFO]: Finished with code: 256
[ERROR]: Install of driver component failed.
[ERROR]: Install of 440.33.01 failed, quitting

[ERROR]: Install of driver component failed.表示驱动安装失败.正常执行了卸载原有驱动是不会出现的

cuda_10.2 还有两个补丁,这个需要在windows下载,复制到linux服务器中.然后执行以下命令:

1
2
sh cuda_10.2.1_linux.run
sh cuda_10.2.2_linux.run

这时在usr/local有两个文件夹,一个为cuda-10.2 另外一个为cuda,其中cuda为cuda-10.2的软连接

如果是用rpm方式安装,先修改cuda源:

1
2
3
# install cuda from .rpm file
# 修改cuda源,/etc/yum.repos.d/cuda.repo
# https://mirrors.aliyun.com/nvidia-cuda/rhel7/x86_64/

四、安装cudnn

cudnn下载地址:https://developer.nvidia.com/rdp/cudnn-download
cuda为10.2 ,选择下载linux-x64-v7.6.5

解压并复制文件:

1
2
3
4
tar -xzvf cudnn-10.2-linux-x64-v7.6.5.32.tgz
sudo cp cuda/include/cudnn.h /usr/local/cuda/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

一个用户/root,只能存在一个cudnn,用到的时候如果要切换别的cudnn,如cudnn8.0.2 则对cudnn8.0.2 解压后,重命名为cuda_v8.再执行:

1
2
sudo cp cuda_v8/include/cudnn.h /usr/local/cuda/include
sudo cp cuda_v8/lib64/libcudnn* /usr/local/cuda/lib64

这样就切换到cudnn8.0.2了


五、设置环境变量

1
vim ~/.bashrc

添加以下内容

1
2
3
4
export CUDA_HOME=/usr/local/cuda
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
export CUDA_ROOT=/usr/local/cuda

这样就可以使用nvcc -V 查看版本了

1
2
3
4
5
[root@~]# nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Wed_Oct_23_19:24:38_PDT_2019
Cuda compilation tools, release 10.2, V10.2.89


Anaconda相关配置

1. 安装Anaconda环境

  1. 进入root环境,安装Anaconda环境

    1
    2
    su root
    `bash Anaconda3-2019.03-Linux-x86_64.sh‘

    注意:下面安装路径不要放在默认的 /root/anaconda3 否则其他用户没有访问权限,这里我选择的是/usr/local/anaconda3

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Do you accept the license terms? [yes|no]
    Please answer 'yes' or 'no':'
    >>> yes
    Anaconda3 will now be installed into this location:
    /root/anaconda3

    - Press ENTER to confirm the location
    - Press CTRL-C to abort the installation
    - Or specify a different location below

    [/root/anaconda3] >>> /usr/local/anaconda3
    PREFIX=/usr/local/anaconda3
    installing: python-3.7.3-h0371630_0 ...

  2. 创建Anaconda用户组

    1
    2
    3
    4
    5
    6
    7
    8
    groupadd anaconda

    # 添加用户到用户组
    usermod -a -G anaconda <username>

    # 一号机用户组
    usermod -a -G anaconda <username>
    usermod -a -G anaconda_back <username>

    将一个用户添加到用户组中,千万不能直接用: usermod -G groupA这样做会使你离开其他用户组,仅仅做为 这个用户组 groupA 的成员。
    应该用 加上 -a 选项: usermod -a -G groupA user,-a 代表 append, 也就是 将自己添加到 用户组groupA 中,而不必离开 其他用户组。

    添加结束通过 vim /etc/group在最后可以查看用户组和用户


  3. 移交目录管理权设置读写权限

    1
    2
    3
    4
    # 移交目录管理权
    chgrp -R anaconda /usr/local/anaconda3
    # 设置读写权限
    chmod 770 -R /usr/local/anaconda3

  4. 设置读写权限

    1
    2
    3
    4
    5
    6
    # 设置组继承
    chmod g+s /usr/local/anaconda3
    # 设置子目录继承
    chmod g+s `find /usr/local/anaconda3/ -type d`
    # 设置共享环境的读写权限
    chmod g-w /usr/local/anaconda3/envs

  5. 切换Anaconda base环境/配置环境变量

    1
    2
    3
    4
    5
    6
    7
    8
    # 切换base环境
    source /usr/local/anaconda3/bin/activate
    source /mnt/anaconda_back/anaconda3/bin/activate #一号机新环境
    # 配置环境变量
    vim /etc/profile
    # 添加:
    `export PATH=/usr/local/anaconda3/bin:$PATH`
    `source /etc/profile

  6. 创建环境并激活

    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
    # 切换用户
    su user

    # 创建环境
    conda create -n myuser python=3.7

    # 查看conda 环境
    [myuser@Master wx]$ conda info --env
    WARNING: The conda.compat module is deprecated and will be removed in a future release.
    # conda environments:
    #
    base * /usr/local/anaconda3
    myuser /usr/local/anaconda3/envs/mysuer

    # 激活环境
    [myuser@Master /]$ /usr/local/anaconda3/bin/conda init bash
    WARNING: The conda.compat module is deprecated and will be removed in a future release.
    no change /usr/local/anaconda3/condabin/conda
    no change /usr/local/anaconda3/bin/conda
    no change /usr/local/anaconda3/bin/conda-env
    no change /usr/local/anaconda3/bin/activate
    no change /usr/local/anaconda3/bin/deactivate
    no change /usr/local/anaconda3/etc/profile.d/conda.sh
    no change /usr/local/anaconda3/etc/fish/conf.d/conda.fish
    no change /usr/local/anaconda3/shell/condabin/Conda.psm1
    no change /usr/local/anaconda3/shell/condabin/conda-hook.ps1
    no change /usr/local/anaconda3/lib/python3.7/site-packages/xonsh/conda.xsh
    no change /usr/local/anaconda3/etc/profile.d/conda.csh
    modified /home/hisense/.bashrc

    ==> For changes to take effect, close and re-open your current shell. <==

    [myuser@Master /]$ source ~/.bashrc
    (base) [myuser@Master /]$ conda activate myuser

    # 激活成功
    (myuser) [myuser@Master /]$

2. Pycharm安装破解(配合VNC)

  1. 安装

    在E:\IDM下载文件\压缩文件\Pycharm2020.1.3_CentOS破解找到相应文件,使用WinSCP上传到Centos服务器;

    1
    2
    3
    tar -xf pycharm-professional-2020.1.3.tar.gz
    # 进入bin
    ./pycharm.sh

    将jetbrians-agent放到桌面待破解,在/usr/share/applications下新建pycharm.desktop文件,并修改:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    vi pycharm.desk.top

    [Desktop Entry]
    Type=Application
    Name=Pycharm
    GenericName=Pycharm
    Comment=Python IDE
    Exec=sh /home/pycharm-2020.1.3/bin/pycharm.sh
    Icon=/home/pycharm-2020.1.3/bin/pycharm.png
    Terminal=false
    Categories=Application;Network;

  2. 破解

    将pycharm.desktop复制到桌面并打开,并进行30天的免费使用,然后将jetbrains-agent拖拽到界面上进行破解;查看about即可知道已破解。


  3. 卸载

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # 首先进入解压的目录
    rm -rf pycharm.2020.1.3
    # 查看是否有隐藏文件并将进行删除
    ls -a
    rm -r ...
    # 删除快捷方式
    cd /usr/share/applications
    rm -r pycharm.desktop



连接远程服务器

1. Pycharm连接远程服务器

原博客地址


2. VScode连接远程服务器

原博客地址


3. 远程访问服务器Jupyter Notebook

原博客地址

  1. ssh远程使用jupyter notebook

    (1)在远程服务器上,启动jupyter notebooks服务:

    1
    jupyter notebook --no-browser --port=8889

    (2)在本地终端中启动SSH:

    1
    ssh -N -f -L localhost:8888:localhost:8889 username@serverIP

    其中: -N 告诉SSH没有命令要被远程执行; -f 告诉SSH在后台执行; -L 是指定port forwarding的配置,远端端口是8889,本地的端口号的8888。

    注意:username@serverIP替换成服务器的对应账号。


    (3)最后打开浏览器,访问:http://localhost:8888/


  2. 利用jupyter notebook自带的远程访问功能

    官方指南在此:官方指南

    (1)生成默认配置文件

    1
    jupyter notebook --generate-config

    (2)生成访问密码(token)

    终端输入ipython,设置你自己的jupyter访问密码,注意复制输出的sha1:xxxxxxxx密码串

    1
    2
    3
    4
    5
    In [1]: from notebook.auth import passwd
    In [2]: passwd()
    Enter password:
    Verify password:
    Out[2]: 'sha1:xxxxxxxxxxxxxxxxx'

    (3)修改./jupyter/jupyter_notebook_config.py中对应行如下

    1
    2
    3
    4
    c.NotebookApp.ip='*'
    c.NotebookApp.password = u'sha:ce...刚才复制的那个密文'
    c.NotebookApp.open_browser = False
    c.NotebookApp.port =8888 #可自行指定一个端口, 访问时使用该端口

    (4)在服务器上启动jupyter notebook

    1
    jupyter notebook

    (5)最后打开浏览器,访问:http://ip:8888/


  3. 其他方法

    配置自己的config文件,如./jupyter/jupyter_notebook_config_backup.py

    1
    jupyter notebook --config ./jupyter/jupyter_notebook_config_backup.py
大爷,赏点?