贡献者: addis
sudo dd
是一个很危险的命令,它直接操作硬盘上的任意位置的数据,无论是否被挂载。sudo dd if=/dev/random of=/dev/sda
会把整个硬盘包括分区方式(MBR,GPT)等所有信息抹掉
dd if=/dev/sda of=/data/disk.img bs=446 count=1
,还原同理,但还原最好只用 440 字节
dd
把一个硬盘的分区克隆的另一个硬盘的分区后(两个分区大小必须完全相同),再 clone MBR 用 dd if=/dev/sda of=/dev/sdc bs=440 count=1
sudo dd if=/dev/zero of=/dev/sdx bs=440 count=1
Gparted
是一个 GUI 硬盘分区工具,在 Ubuntu live CD 中自带
GParted
使用 e2image -ra -p /dev/sda1 /dev/sdb1
来复制分区,没有数据的部分不会复制,Arch Wiki 中的 disk cloning 文章列出了很多工具。用 e2image
来备份和恢复参考这里。
sda, sdb
等编号是不稳定的,可能重启等操作之后会变
fdisk -l
查看所有挂载的硬盘
lsblk
也可以查看
sudo e2fsck -f test.img
可以检查并自动修复文件系统。
resize2fs -p /dev/sd? ???K
可以改变 ext4 文件系统的大小,Gparted 用的就是这个命令。这个命令需要很长时间。
mklabel
修改分区的 label,ntfslabel /dev/nvme0n1p3 win
改变 ntfs 分区的 label,还有 e2label
用法一样。注意用 gparted
里面的 label 功能似乎并不是真正的 label,/etc/fstab
识别不出后者。用 e2label /dev/sda1
可以查看某个分区的 label。
mkfs.ext4 /dev/sdx1
或者 mke4fs -t ext4 /dev/sdb1
把某个分区格式化为 ext4
extFAT
在 Ubuntu 中并不怎么支持 resize 和移动,还是用 windows 的傲梅比较好
/etc/fstab
用于设置如何把不同的分区或网络硬盘挂载到不同文件夹。
<file system> <mount point> <type> <options> <dump> <pass>
uid=1000,gid=1000
是当前登录用户的 user/group id,也可以直接把数字换成用户名和组名。
NTFS
的设置是 LABEL=mydrive2 /mnt/drive2 ntfs-3g nofail,x-gvfs-show,uid=1000,gid=1000 0 0
LABEL=win /mnt/win ntfs defaults,auto,rw,nofail,umask=000,uid=addis,gid=addis 0 0
exFAT
的设置是 LABEL=mydrive1 /mnt/drive1 exfat nofail,x-gvfs-show,uid=1000,gid=1000 0 0
LABEL=
或者 UUID=
,第二列是 mount point,第三列是文件系统,用 auto
可以自动检测。第四列是一些选项,nofail
是即使硬盘没有插入也不会报错,x-gvfs-show
是在 gnome 文件浏览器和 taskbar 中显示。uid
和 gid
是挂载后文件的 owner,1000
是当前用户。auto
是开机的时候自动挂载,umask=000
设置挂在以后所有文件夹和文件都对所有用户有最高权限,注意这个选项一般用于 NTFS 文件系统,linux 原生文件系统用 chmod
即可。
defaults
选项相当于 rw, suid, dev, exec, auto, nouser, async
.
rw
是支持读写,suid
支持 SetUID 权限,exec
支持可执行文件。dev
选项可以支持挂载文件夹中的设备文件(block device 和 character device), nodev
则禁止。nouser
只允许管理员挂载或弹出硬盘。user
允许任何用户挂载或弹出硬盘。users
允许任何用户挂载,但只有挂载的用户可以弹出某个硬盘。
user
和 users
自动开启 noexec
,除非明确指定 exec
选项。此时即使文件显示有 x
权限也无法执行(但 script 仍然可以用 source
执行)。
sudo mount -a
会挂载 fstab
中的所有硬盘(如果没有已经挂载)。sudo umount -a
同理(如果被占用则不会弹出)。
mount
未必需要 sudo,如果被挂载的目录不需要管理员权限。
sudo mount 挂载目录
可以根据 fstab
中该目录的设置挂载。umount 挂载目录
同理。可以是相对或绝对目录。
umount
就会失败(target is busy
)。
sudo dd if=/dev/zero of=/路径/虚拟硬盘名.img bs=1M count=100
。其中镜像文件 .img
是不必须的。
sudo mkfs -t ext4 /路径/虚拟硬盘名.img
。注意运行完以后,镜像文件会自动缩小的刚好够用,所以第一步中不需要弄太大的文件。
sudo mount -t auto -o loop /路径/虚拟硬盘名.img 挂载目录
其中 -t
是文件系统类型。镜像文件甚至可以存在于 挂载目录
中。但是挂载以后并不能看到该文件。
/路径/虚拟硬盘名.img /挂载目录 ext4 nofail 0 0
df -h
查看文件系统会看到例如 /dev/loop13 488M 24K 452M 1% /mnt/test_dir
resize2fs 虚拟硬盘名.img 1G
可以改变分区大小。
ext4
系统中 du
镜像文件,那么 resize 后所占硬盘空间仍然会是刚好够用。这只是 ext4 特有的优化,实际上文件的大小的确是 resize2fs
的目标大小(可以用 stat 文件
确认)。如果把这个文件移动到比如说 exFat 文件系统中,那么占用空间就会变成后者的大小。
可以把多个物理硬盘融合为一个逻辑硬盘,见 Logical Volume Management(LVM)笔记。
grub-customizer
, 可以设置 grub 菜单,记住上次的选择,检测新系统,等。
os-prober
也可以发现新系统并加入 grub 菜单(会被 grub-customizer 使用)
/boot/grub/grub.cfg
,GPT 的在 /boot/efi/EFI/ubuntu/grub.cfg
lilo
是一个可以安装 generic windows boot loader on MBR 的命令
sda, sdb
等在 grub2 命令行里面的 ls 名字叫做 hd1, hd2...
sudo grub-install /dev/sd#
可以在某个硬盘中安装 grub (注意如果硬盘只有一个分区的话,分区名和硬盘名相同,安装可能就会出错)
grub-install
可能使用 grub-pc
包也可能使用 grub-efi-amd64
包。前者给 MBR 硬盘安装,后者给 GPT 硬盘安装。它们可以同时安装。
failed to get canonical path of...
就用 sudo grub-install /dev/sdX --root-directory=/mnt/[mount point directory]
will not proceed with blocklist
,就在安装命令后面加 --force
。
df
只会显示已挂载的硬盘,而 fdisk
或者 disk, gparted
软件才会显示所有连接的硬盘
sudo dd bs=4M if=/path/to/ISOfile of=/dev/sda status=progress oflag=sync
注意 sda
后面不能有数字! 这样 dd
会把整个硬盘克隆成 iso 的内容而无视之前的任何 partition table 和分区。此时 u 盘和光盘完全等效,都是只读的(亲测成功).
/boot/grub/grub.cfg
或者 grub.config
定义的
sudo grub-install ...
在新硬盘上面安装 grub(如果说什么不推荐用啥不稳定的,就在后面加 --force). 然后再把原来的 grub.cfg 拷贝到新硬盘就好了(不确定新安装 grub 会不会把 cfg 重置).
blkid
可以查看所有分区的 uuid
tune2fs -U random /dev/sdb?
, disk 中会看到变化,如果 blkid 看见 uuid 没有变化,就 mount 再 umount 即可刷新
fdisk
也可以改变 uuid, sudo fdisk /dev/sd?
然后按 x 再按 i 即可
/etc/default/grub
文件中设置 GRUB_DEFAULT=saved
(GRUB_DEFAULT=0
设置第一个操作系统)还需要在下面加一行 GRUB_SAVEDEFAULT=true
。保存了以后运行命令 sudo update-grub
即可。
以下步骤亲测成功。
dd
命令备份并拷贝 MBR
grub-install /dev/sd?
重新安装 grub,确认目标硬盘中 /boot/grub/grub.cfg
配置文件中所有 UUID 都是新分区的 UUID 而不是老的。如果是老的就全部替换。
sudo add-apt-repository universe
sudo apt update
sudo apt install exfat-fuse exfat-utils
sudo apt-get install smartmontools
,然后 sudo smartctl -i /dev/sdX
查看是否开启了 smart,sudo smartctl -a /dev/sdX
查看具体 smart 信息。
Unknown USB bridge
,加一个选项即可,如 sudo smartctl -d sat -a /dev/sdX
(如果硬盘使用 sata 接口)。
sudo smartctl -t short /dev/sdX
可以做一个简短自测,
sudo smartctl -t long /dev/sdX
做一个长自测
VALUE
是当前的归一化的分数,0-100,100 是最佳,越低越差。WORST
是历史出现过的最低分。THRESH
是阈值,若分数低于阈值就是出问题了。
TYPE
是每一行的类型,Pre-fail
就是如果低于阈值随时可能会挂,Old_age
就是如果低于阈值就说明设计的使用寿命到了,会增加故障的风险。