- Ubuntu (Debian): https://ubuntu.com/download/server
- CentOS (RHEL): https://www.centos.org/download/
- 下载 Rufus: https://rufus.ie/
- 找到并选择正确的 USB 设备和镜像文件,其他选项保持默认:
等待制作完成。
- 关机并冷启动,在 BIOS 启动过程中调出启动菜单,选择 USB 设备作为启动设备。
- 可以全部使用默认选项进行安装,需要格外注意安装的硬盘不能选错。
- 一般在格式化硬盘的时候不启用 LVM Group(Ubuntu),而 CentOS 可以启用(直接选中一整块硬盘然后抹掉数据作为系统盘,这时默认启用 LVM Group)。
user@host:~$ sudo vim /etc/netplan/00-installer-config.yaml
network:
ethernets:
eno1:
dhcp4: no
addresses: [192.168.1.X/24]
gateway4: 192.168.1.1
nameservers:
addresses: [223.5.5.5,8.8.8.8]
version: 2
启用固定 IP 后,NAT 端口转发才能正常使用。
记得应用配置:
user@host:~$ sudo netplan apply
现在网络统一使用动态 ip,因此保持默认配置即可。
user@host:~$ sudo vim /etc/ssh/sshd_config
常用设置:
Port XXXX # SSH server listening port
UseDNS no
GSSAPIAuthentication no # These two settings make SSH connection faster
PermitRootLogin no # Prohibit root login
Match User admin,ubuntu # Per-User settings
PasswordAuthentication no
重启 SSH 服务以更新配置:
user@host:~$ sudo service sshd restart
使用 parted
初始化硬盘并分区:
user@host:~$ sudo fdisk -l
...
Disk /dev/sdc: 7.28 TiB, 8001563222016 bytes, 15628053168 sectors
Disk model: HGST HUS728T8TAL
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: none
Disk identifier: 41426009-6523-4E08-AEB4-3E0F118F50CF
...
这里,/dev/sdc
还没有初始化和分区,我们使用 parted
进行初始化并分区。
user@host:~$ sudo parted /dev/sdc
GNU Parted 3.3
Using /dev/sdc
Welcome to GNU Parted! Type 'help' to view a list of commands.
$ (parted) mklabel gpt
Warning: The existing disk label on /dev/sdc will be destroyed and all data on this disk will be lost. Do you want to
continue?
$ Yes/No? yes
$ (parted) mkpart primary 2048s 100%
$ (parted) quit
Information: You may need to update /etc/fstab.
请注意,我们首先键入 mklabel gpt
将分区表建立为 GPT
格式;然后,我们使用 mkpart primary 2048s 100%
创建了一个分区(整个硬盘),第一个参数 2048s
是硬盘的 4k
对齐大小。
然后,我们的 fdisk
信息变为:
user@host:~$ sudo fdisk -l
Disk /dev/sdc: 7.28 TiB, 8001563222016 bytes, 15628053168 sectors
Disk model: ST8000NM000A-2KE
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 553AC23F-C393-4B23-B193-AA193F02EF34
Device Start End Sectors Size Type
/dev/sdc1 2048 15628052479 15628050432 7.3T Linux filesystem
我们就可以在 /dev/sdc1
上面创建文件系统了。
user@host:~$ sudo mkfs.ext4 /dev/sdc1
Creating filesystem with 1953506304 4k blocks and 244191232 inodes
Filesystem UUID: aa275f52-73a9-4dbc-9656-b48ead13a53c
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, 1934917632
Allocating group tables: done
Writing inode tables: done
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done
列出所有可用硬盘
user@host:~$ sudo fdisk -l
Disk /dev/loop0: 29.9 MiB, 31334400 bytes, 61200 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 /dev/loop1: 54.98 MiB, 57626624 bytes, 112552 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 /dev/loop2: 71.28 MiB, 74735616 bytes, 145968 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 /dev/sdb: 7.28 TiB, 8001563222016 bytes, 15628053168 sectors
Disk model: HGST HUS728T8TAL
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 41426009-6523-4E08-AEB4-3E0F118F50CF
Device Start End Sectors Size Type
/dev/sdb1 2048 15628053134 15628051087 7.3T Linux filesystem
Disk /dev/sda: 894.26 GiB, 960197124096 bytes, 1875385008 sectors
Disk model: SAMSUNG MZ7LH960
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 50B12219-3E72-4376-A057-5922B0C432B9
Device Start End Sectors Size Type
/dev/sda1 2048 1050623 1048576 512M EFI System
/dev/sda2 1050624 1875382271 1874331648 893.8G Linux filesystem
以 dev/sdb1 (7.3T HDD disk)
为例,要把它挂载到 /mnt/hdd1
上,首先编辑 /etc/fstab
:
user@host:~$ sudo vim /etc/fstab
添加一行:
/dev/sdb1 /mnt/hdd1 ext4 defaults 0 0
分别为硬盘设备路径,挂载路径,文件系统以及挂载选项。
执行挂载命令,若无报错信息且 df
命令可正确列出挂载的磁盘就完成了。
user@host:~$ sudo mount -a
注意:
如果要使用最后一节的脚本来新建用户和更新文件夹信息的话,请将硬盘挂载到 /mnt/
中,如: /mnt/hdd1
, /mnt/hdd2
, /mnt/ssd
.
https://developer.nvidia.com/cuda-downloads
选择正确的系统版本和系统架构, 不要使用 .run
runfile 的方式安装。
依照网页上给出的指示操作,并重启系统。
sudo systemctl enable multi-user.target --force
sudo systemctl set-default multi-user.target
执行完后请重启系统。这些命令将 Linux 系统设置于无图形界面模式,这样可以完全停止 X 进程及释放其在 GPU 中的预留显存,并避免自动休眠。
编辑 /etc/environment
,把 /usr/local/cuda/bin
加入 PATH
中,如同下面一样
PATH="/usr/local/cuda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:...(其他路径)"
这样就可以运行 nvcc
等程序。
- CuDNN
https://developer.nvidia.com/rdp/cudnn-download
依照 https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html 上的步骤操作。
- NCCL
https://developer.nvidia.com/nccl/nccl-download
依照 https://docs.nvidia.com/deeplearning/nccl/install-guide/index.html 上的步骤操作。
例如,我们为 Ubuntu
更换 SJTU
镜像源,命令如下:
user@host:~$ sudo sed -i 's/http:\/\/cn.archive.ubuntu.com/http:\/\/mirror.sjtu.edu.cn/g' /etc/apt/sources.list
APT 自动更新使系统软件包始终最新,请酌情采用。
user@host:~$ sudo crontab -e
42 3 * * * apt-get update && apt-get upgrade -y && apt-get dist-upgrade -y && apt-get autoremove
请小心使用下面提及的脚本
这些脚本可以在当前存储库里找到。你可以直接从网页把脚本拷贝到工作目录下,或者使用 git clone
克隆下来。
首先定位交换空间位置:
如果未使用 LVM Group,交换空间一般是位于根目录的一个文件:
user@host:~$ sudo swapon -s
Filename Type Size Used Priority
/swap.img file 8388604 128512 -2
而如果使用了 LVM Group,上述命令会打印出 /dev/dm-1
。这是因为交换空间实际上是通过 /dev/mapper/xxx-swap
实现的。
如果使用交换文件,那么直接删除这个文件,并新建一个更大的文件作为交换空间即可:
user@host:~$ sudo swapoff /swapfile
user@host:~$ sudo dd if=/dev/zero of=/swapfile bs=1M count=1024 oflag=append conv=notrunc
user@host:~$ sudo mkswap /swapfile
user@host:~$ sudo swapon -a
请注意 /etc/fstab
中是否已经添加了 swap
记录,这条记录中的 swap 位置要与文件名一致
而如果是使用的 /dev/mapper/xxx-swap
,那么使用 lvresize
命令:
user@host:~$ swapoff /dev/mapper/xxx-swap
user@host:~$ lvresize -L 10G /dev/mapper/xxx-swap
user@host:~$ sudo mkswap /dev/mapper/xxx-swap
user@host:~$ sudo swapon -a
需要脚本 newuser.sh
user@host:~$ sudo sh newuser.sh [username] [password]
需要脚本 set.sh
重装后,原来的文件夹所有者信息会和当前不对应,要修复它,首先进入 /mnt/hdd1
目录:
user@host:~$ cd /mnt/hdd1
然后使用下面的命令更新所有者。例如,alien
文件夹的所有者会被更新为 alien:alien
。
user@host:/mnt/hdd1$ find . -maxdepth 1 -type d | sudo bash ~/set.sh
In Ubuntu or Debian:
user@host:~$ sudo usermod -aG sudo USERNAME
In CentOS or RHEL:
user@host:~$ sudo usermod -aG wheel USERNAME
由于网络条件的原因,部分时段服务器无法访问 Github,因此我们需要设置一个自动更新脚本,来为 Github 配置 Hosts。(来源:https://github.com/ineo6/hosts , https://gitee.com/ineo6/hosts )
请服务器管理员使用 sudo
权限将本目录下的 fetchDNS
文件下载并放在一个固定目录下(如:/root
)。
添加可执行权限:chmod a+x ./fetchDNS
,并尝试运行确保不报错(需要系统中包含 Python 3.4+)。
即,执行 ./fetchDNS
将会输出 Set hosts finished.
编辑 crontab
:
0 3 * * 0 /root/fetchDNS
将会在每周日,服务器上时间3:00 AM自动执行 fetchDNS
脚本。