Ubuntu 安装新硬盘
See: InstallingANewHardDrive - Community Help Wiki
安装新 HDD
查看硬盘信息
sudo lshw -C disk *-namespace:0
description: NVMe disk
physical id: 0
logical name: hwmon3
*-namespace:1
description: NVMe disk
physical id: 2
logical name: /dev/ng0n1
*-namespace:2
description: NVMe disk
physical id: 1
bus info: nvme@0:1
logical name: /dev/nvme0n1
size: 476GiB (512GB)
capabilities: gpt-1.00 partitioned partitioned:gpt
configuration: guid=********-****-****-****-************ logicalsectorsize=512 sectorsize=512 wwid=eui.00000000000000******************
*-disk:0
description: SCSI Disk
product: 001-1ER164
vendor: ST2000DM
physical id: 0.0.0
bus info: scsi@0:0.0.0
logical name: /dev/sda
version: 0015
serial: 670200213C04
size: 1863GiB (2TB)
capabilities: gpt-1.00 partitioned partitioned:gpt
configuration: ansiversion=6 guid=*******-****-****-****-*********** logicalsectorsize=512 sectorsize=512
*-disk:1
...
physical id: 0.0.1
bus info: scsi@0:0.0.1
logical name: /dev/sdb
...
size: 1863GiB (2TB)
...这意味着机器上目前插了 3 块盘:
- 1 * NVMe disk(
/dev/nvme0n1) - 2 * SCSI Disk(
/dev/sda和/dev/sdb)。
重点关注 *-disk 的 logical name(也即 /dev/sda 和 /dev/sdb),后面会用到。
当然也可以用 fdisk 查看更详细的信息:
sudo fdisk -l硬盘分区
如果硬盘已经格式化过并且包含数据,可以选择跳过该部分。
如果硬盘空白且未格式化,那么可以选择命令行工具或者图形界面(GParted)进行格式化。
本文选择命令行工具格式化。fdisk 比较老了,主要缺点是只能创建 MBR 分区。
这里以 /dev/sda 为例。
取消挂载(可选)
如果硬盘已经挂载,需要先卸载掉:
sudo umount -l /media/data1使用 parted 进行分区
sudo parted /dev/sda进入分区界面。键入 help 查看帮助:
(parted) help
align-check TYPE N check partition N for TYPE(min|opt) alignment
help [COMMAND] print general help, or help on COMMAND
mklabel,mktable LABEL-TYPE create a new disklabel (partition table)
mkpart PART-TYPE [FS-TYPE] START END make a partition
name NUMBER NAME name partition NUMBER as NAME
print [devices|free|list,all|NUMBER] display the partition table, available devices, free space, all found partitions, or a particular partition
quit exit program
rescue START END rescue a lost partition near START and END
resizepart NUMBER END resize partition NUMBER
rm NUMBER delete partition NUMBER
select DEVICE choose the device to edit
disk_set FLAG STATE change the FLAG on selected device
disk_toggle [FLAG] toggle the state of FLAG on selected device
set NUMBER FLAG STATE change the FLAG on partition NUMBER
toggle [NUMBER [FLAG]] toggle the state of FLAG on partition NUMBER
unit UNIT set the default unit to UNIT
version display the version number and copyright information of GNU创建一个新的 GPT 硬盘标签:
mklabel gptSee: GPT vs MBR
- MBR有两个主要限制:分区不能大于 2 TB,主分区不能超过 4 个。
- GPT没有这两个限制,但需要内核支持 EFI,一般新的发行版都是支持的。
确认格式化:
# Warning: The existing disk label on /dev/sda will be destroyed and all data on this disk will be lost. Do you want to continue?
# Yes/No? Yes创建一个占满空间的分区:
- 这里 END 设为 2 是对于 2TB 的硬盘,如果是 4TB,那么 END 值就为 4
- 或者用百分比更好
- 文件系统
ext4适合 Ubuntu,fat32同时适合 Ubuntu 或 Windows - 推荐用
ext4
# mkpart PART-TYPE [FS-TYPE] START END
# # ext4, 绝对大小, 2TB
# unit TB
# mkpart primary ext4 0 2
# # ext4, 百分比
mkpart primary ext4 0% 100%
# # fat32, 绝对大小, 2TB
# unit TB
# mkpart primary fat32 0 2
# # fat32, 百分比
# mkpart primary fat32 0% 100%查看分区结果:
printModel: ST2000DM 001-1ER164 (scsi)
Disk /dev/sda: 2.00TB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
# 如果是 ext4
Number Start End Size File system Name Flags
1 1049kB 2000GB 2000GB ext4 primary
# 如果是 fat32
Number Start End Size File system Name Flags
1 0.00TB 2000GB 2.00TB fat32 primary保存并退出 parted:
quit会提示你更新 /etc/fstab:
Information: You may need to update /etc/fstab.查看分区后的设备
sudo fdisk -lDisk /dev/sda: 1.82 TiB, 2000398934016 bytes, 3907029168 sectors
Disk model: 001-1ER164
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: ********-****-****-****-************
# ext4
Device Start End Sectors Size Type
/dev/sda1 2048 3907028991 3907026944 1.8T Linux filesystem
# fat32
Device Start End Sectors Size Type
/dev/sda1 2048 3907028991 3907026944 1.8T Microsoft basic data格式化文件系统
# ext4
sudo mkfs -t ext4 /dev/sda1
# # fat32
# sudo mkfs -t vfat /dev/sda1See: ubuntu - mount: wrong fs type, bad option, bad superblock - Unix & Linux Stack Exchange
13.04 - Can't mount/format internal hard drive - Ask Ubuntu
挂载
创建挂载点
Ubuntu 默认使用 /media 作为挂载点。
所以我们也遵循该约定俗成,将 /dev/sda 挂载到 /media/data1。
sudo mkdir /media/data1挂载硬盘(手动)
sudo mount /dev/sda1 /media/data1
# sudo mount -a挂载硬盘(自动)
在 /etc/fstab 末尾添加如下内容:
# # ext4
/dev/sda1 /media/data1 ext4 defaults 0 2
# # fat32
# /dev/sda1 /media/data1 vfat defaults 0 2然后执行:
sudo mount -a取消挂载硬盘
sudo umount /media/data1
# # if busy
# sudo umount -l /media/data1查看硬盘容量
df -h /media/data1Filesystem Size Used Avail Use% Mounted on
/dev/sda1 1.9T 32K 1.9T 1% /media/data1或者查看全部硬盘容量:
df -h安装新 SSD (NVMe)
查看硬盘信息
lsblk
sudo lsblk -o NAME,MODEL,SERIAL,SIZE,TYPE,FSTYPE,MOUNTPOINTS或者查看指定硬盘的信息:
sudo lsblk -o NAME,MODEL,SIZE,FSTYPE,MOUNTPOINTS /dev/nvme0n1 /dev/nvme1n1NAME MODEL SERIAL SIZE TYPE FSTYPE MOUNTPOINTS
loop0 4K loop squashfs /snap/bare/5
loop1 73.9M loop squashfs /snap/core22/2216
loop2 74M loop squashfs /snap/core22/2292
...
sda WDC WUH721816ALE6L4 2P*****T 14.6T disk
└─sda1 14.6T part ext4 /media/data
nvme1n1 ZHITAI Ti600 4TB ZTA604TAB********B 3.6T disk
├─nvme1n1p1 512M part vfat /boot/efi
└─nvme1n1p2 3.6T part ext4 /var/snap/firefox/common/host-hunspell
/
nvme0n1 ZHITAI TiPlus7100s 4TB ZTA84T0AB********0 3.7T disk
└─nvme0n1p1 16M part这里的 nvme0n1 和 nvme1n1 就是两块 NVMe SSD。
列出 /dev 设备节点
ls -l /dev/nvme*crw------- 1 root root 241, 0 1月 30 19:28 /dev/nvme0
brw-rw---- 1 root disk 259, 3 1月 30 19:28 /dev/nvme0n1
brw-rw---- 1 root disk 259, 4 1月 30 19:28 /dev/nvme0n1p1
crw------- 1 root root 241, 1 1月 30 19:28 /dev/nvme1
brw-rw---- 1 root disk 259, 0 1月 30 19:28 /dev/nvme1n1
brw-rw---- 1 root disk 259, 1 1月 30 19:28 /dev/nvme1n1p1
brw-rw---- 1 root disk 259, 2 1月 30 19:28 /dev/nvme1n1p2
crw------- 1 root root 10, 121 1月 30 19:29 /dev/nvme-fabrics可以看到 /dev/nvme0n1 和 /dev/nvme1n1。
nvme-cli
# sudo apt install -y nvme-cli
sudo nvme listNode SN Model Namespace Usage Format FW Rev
--------------------- -------------------- ------------------------ --------- -------------------------- ---------------- --------
/dev/nvme0n1 ZTA84T0AB********0 ZHITAI TiPlus7100s 4TB 1 4.10 TB / 4.10 TB 512 B + 0 B ZTA25001
/dev/nvme1n1 ZTA604TAB********B ZHITAI Ti600 4TB 1 4.00 TB / 4.00 TB 512 B + 0 B ZTA23001假设新的 SSD 是 /dev/nvme0n1,也即 ZHITAI TiPlus7100s 4TB。
查看系统盘
findmnt -no SOURCE,TARGET //dev/nvme1n1p2 /也即当前系统盘是 /dev/nvme1n1。
查看 /etc/fstab,确认系统盘的挂载信息:
cat /etc/fstab硬盘分区
清理旧分区(可选)
一定要看清楚是哪个盘!由于安装位置不同,nvme0n1 和 nvme1n1 并不遵循先后顺序!
sudo wipefs -a /dev/nvme0n1/dev/nvme0n1: 8 bytes were erased at offset 0x00000200 (gpt): 45 46 49 20 50 41 52 54
/dev/nvme0n1: 8 bytes were erased at offset 0x3b9dca55e00 (gpt): 45 46 49 20 50 41 52 54
/dev/nvme0n1: 2 bytes were erased at offset 0x000001fe (PMBR): 55 aa
/dev/nvme0n1: calling ioctl to re-read partition table: Success分区 GPT
sudo parted -a optimal /dev/nvme0n1 --script mklabel gpt mkpart primary 0% 100%-a optimal:对齐分区以获得最佳性能--script:非交互模式mklabel gpt:创建 GPT 分区表mkpart primary 0% 100%:创建一个主分区,使用整个磁盘空间
让内核重新读取分区表:(可选,一般自动完成)
sudo partprobe /dev/nvme0n1
sudo lsblk /dev/nvme0n1NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
nvme0n1 259:3 0 3.7T 0 disk
└─nvme0n1p1 259:4 0 3.7T 0 part格式化为 ext4
sudo mkfs.ext4 /dev/nvme0n1p1挂载
创建挂载点
假如想挂载到 /media/ssd:
sudo mkdir -p /media/ssd手动挂载
sudo mount /dev/nvme0n1p1 /media/ssd
df -hT /media/ssdFilesystem Type Size Used Avail Use% Mounted on
/dev/nvme0n1p1 ext4 3.7T 28K 3.5T 1% /media/ssd自动挂载
获取 UUID:
sudo blkid /dev/nvme0n1p1/dev/nvme0n1p1: UUID="9e...5a" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="primary" PARTUUID="7a...e9"在 /etc/fstab 末尾添加如下内容:
sudo nano /etc/fstab# ZT NVMe SSD (4TB)
UUID=9exxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx5a /media/ssd ext4 defaults,noatime,nofail 0 2UUID=9e...5a:替换为blkid看到的实际 UUID,比用/dev/nvme0n1p1更稳定可靠/media/ssd:挂载点ext4:文件系统类型defaults,noatime,nofail:defaults:使用默认挂载选项noatime:访问文件时不更新访问时间,提升性能nofail:即使这块盘挂载失败,系统也继续启动
0:不进行 dump 备份,现在大部分都设为 02:文件系统检查顺序0不检查,1最先检查,一般只给根分区/,2在根分区之后检查- 因为这块当作数据盘,所以设为
2
检查并挂载
sudo findmnt --verify0 parse errors, 0 errors, 1 warningsudo umount /media/ssd
sudo mount -a查看挂载情况
findmnt /media/ssdTARGET SOURCE FSTYPE OPTIONS
/media/ssd /dev/nvme0n1p1 ext4 rw,noatimemount | grep '/media/ssd'/dev/nvme0n1p1 on /media/ssd type ext4 (rw,noatime)设置读写权限
让当前用户拥有该挂载点的读写权限:
sudo chown -R $USER:$USER /media/ssd