我想知道如何从终端格式化存储驱动器。答案中提供的有用信息是常用的命令选项和可用于推断未来用途的基础知识。具体来说,我想知道如何在不同的文件系统(如 NTFS、FAT32、EXT4 等)中进行格式化。还需要有关如何通过终端对驱动器进行分区的信息。
我正在尝试从终端将大容量外部硬盘(EHDD)格式化为 NTFS。
我知道我可以使用 gparted 以及其他 GUI 程序来实现这一点,但我仍然想知道如何从终端来做到这一点。
答案1
有几种可用选项:
fdisk
和parted
都是交互式的,并且有帮助命令,因此您始终可以在程序中寻求帮助。两者都可以编写脚本。这些mkfs
命令不是交互式的。
fdisk
fdisk
需要一个设备(例如/dev/sda
)作为参数。它有以下命令:
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the DOS compatibility flag
d delete a partition
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)
我用的fdisk
不多。我只关注:
parted
parted
没有需要一个参数(它试图“猜测”),但您始终应该指定磁盘。如果可以选择,parted
这是您应该首选的程序。它有以下命令:
align-check TYPE N check partition N for TYPE(min|opt) alignment
check NUMBER do a simple check on the file system
cp [FROM-DEVICE] FROM-NUMBER TO-NUMBER copy file system to another partition
help [COMMAND] print general help, or help on COMMAND
mklabel,mktable LABEL-TYPE create a new disklabel (partition table)
mkfs NUMBER FS-TYPE make a FS-TYPE file system on partition NUMBER
mkpart PART-TYPE [FS-TYPE] START END make a partition
mkpartfs PART-TYPE FS-TYPE START END make a partition with a file system
resizepart NUMBER END resize partition NUMBER
move NUMBER START END move partition NUMBER
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
resize NUMBER START END resize partition NUMBER and its file system
rm NUMBER delete partition NUMBER
select DEVICE choose the device to edit
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 Parted
命令可以缩写为唯一的前缀(例如,h
是 的缩写help
)。
我将使用/tmp/part
我创建的临时文件 ( ) 向您展示命令,因此大小会略小。您应该将其替换为您所需的设备(/dev/sda
例如)。
首先,如果您的磁盘没有分区表,我们必须创建一个:
parted /tmp/part mklabel gpt
或者mklabel msdos
,如果你想要老式的 4 个主分区(称为MBR 或 MSDOS 分区表)。然后我们创建一个 ext4 分区,起始大小为 3GB(即保留最初的 3G 空闲空间),大小为 2GB(即结束于 5GB)。parted
需要以 MB 为单位的位置mkpartfs
,但我们可以指定后缀:
parted /tmp/part mkpart primary ext4 3G 5G
另外,现在是 1GB 的 NTFS 分区:
parted /tmp/part mkpart primary ntfs 5G 6G
结果:
# parted /tmp/part print
Model: (file)
Disk /tmp/blah: 10.4GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name Flags
1 3000MB 5000MB 2000MB primary
2 5000MB 6000MB 1000MB primary msftdata
请注意它如何使用 SI 前缀,而 GParted 则坚定地使用二进制前缀(同时放弃愚蠢的i
)。我将标记分区:
# parted /tmp/part name 1 hello
# parted /tmp/part name 2 world
# parted /tmp/part print
Model: (file)
Disk /tmp/blah: 10.4GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name Flags
1 3000MB 5000MB 2000MB hello
2 5000MB 6000MB 1000MB world msftdata
虽然parted
可以正常创建文件系统的分区ntfs
,但它无法将现有分区格式化为 NTFS:
mkfs partition fs-type
Make a filesystem fs-type on partition. fs-type can be one
of "fat16", "fat32", "ext2", "linux-swap", or "reiserfs".
事实上,parted 会告诉你应该用它来操作分区,不是文件系统,这让我想到:
mkfs
mkfs
,例如fsck
,本质上是各种文件系统特定命令的前端。例如,在我的系统上,,mkfs.bfs
,mkfs.cramfs
,mkfs.ext2
,mkfs.ext3
,mkfs.ext4
,mkfs.ext4dev
,mkfs.fat
,mkfs.minix
,mkfs.msdos
都可用。mkfs.ntfs
mkfs.vfat
现在,不幸的是,虽然 可以parted
很好地处理文件(如我上面使用的文件),mkfs
但无法在此类文件中寻找分区。事实上,它需要块设备,所以如果我要使用新文件/tmp/file
,mkfs
我必须强制它这样做。您将使用与要格式化的分区相对应的块设备,例如/dev/sda2
。 的一般语法mkfs
是:
# mkfs --help
Usage: mkfs [options] [-t type fs-options] device [size]
Options:
-t, --type=TYPE file system type, when undefined ext2 is used
fs-options parameters to real file system builder
device path to a device
size number of blocks on the device
-V, --verbose explain what is done
defining -V more than once will cause a dry-run
-V, --version output version information and exit
-V as version must be only option
-h, --help display this help and exit
For more information, see mkfs(8).
如您所见,该-t
标志允许我们传递特定于文件系统的标志。例如,NTFS 标志:
# mkfs.ntfs --help
Usage: mkntfs [options] device [number-of-sectors]
Basic options:
-f, --fast Perform a quick format
-Q, --quick Perform a quick format
-L, --label STRING Set the volume label
-C, --enable-compression Enable compression on the volume
-I, --no-indexing Disable indexing on the volume
-n, --no-action Do not write to disk
Advanced options:
-c, --cluster-size BYTES Specify the cluster size for the volume
-s, --sector-size BYTES Specify the sector size for the device
-p, --partition-start SECTOR Specify the partition start sector
-H, --heads NUM Specify the number of heads
-S, --sectors-per-track NUM Specify the number of sectors per track
-z, --mft-zone-multiplier NUM Set the MFT zone multiplier
-T, --zero-time Fake the time to be 00:00 UTC, Jan 1, 1970
-F, --force Force execution despite errors
Output options:
-q, --quiet Quiet execution
-v, --verbose Verbose execution
--debug Very verbose execution
Help options:
-V, --version Display version
-l, --license Display licensing information
-h, --help Display this help
Developers' email address: [email protected]
News, support and information: http://tuxera.com
因此,让我们创建一个 NTFS 分区,并快速格式化(-Q
),强制它对非块设备文件进行操作(-F
),并设置标签(-L "hello world"
)。
# mkfs -t ntfs -F -Q -L "hello world" /tmp/file
/tmp/file is not a block device.
mkntfs forced anyway.
The sector size was not specified for /tmp/file and it could not be obtained automatically. It has been set to 512 bytes.
The partition start sector was not specified for /tmp/file and it could not be obtained automatically. It has been set to 0.
The number of sectors per track was not specified for /tmp/file and it could not be obtained automatically. It has been set to 0.
The number of heads was not specified for /tmp/file and it could not be obtained automatically. It has been set to 0.
Cluster size has been automatically set to 4096 bytes.
To boot from a device, Windows needs the 'partition start sector', the 'sectors per track' and the 'number of heads' to be set.
Windows will not be able to boot from this device.
Creating NTFS volume structures.
mkntfs completed successfully. Have a nice day.
显然它不喜欢处理文件。:) 别担心,在处理实际磁盘时它应该会自动检测大多数值。即使这个“文件”作为文件系统也可以正常工作:
# mount -t ntfs-3g /tmp/file /mnt
# touch "/mnt/a file in mnt"
# ls -l /mnt
total 0
-rwxrwxrwx 1 root root 0 Aug 29 06:43 a file in mnt
# umount /mnt
# ls -l /mnt
total 0
(看到奇怪的权限了吗?)
笔记:
- 我还没有
sudo
在这个答案的任何地方使用过。由于我操作的是文件,以及我拥有的文件,所以我不需要sudo
。parted
会就此发出警告。对于通常始终由拥有的块设备root
,您将需要(或者您必须通过或sudo
使用 root shell )。sudo -i
sudo su -
parted
是一个 GNU 程序,与许多 GNU 程序一样,具有大量格式的文档info
。安装parted-doc
(sudo apt-get install parted-doc
) 然后运行info parted
。您还可以签出在线用户手册。- GParted 能够将分区格式化为 NTFS,因为它会
mkfs
直接调用相应的程序(mkntfs
,在本例中 -mkfs.ntfs
只是 的链接mkntfs
)。它还设置了许多参数。事实上,对于大多数操作,您可以检查 GParted 消息的详细信息以查看运行了哪些命令。 - 我不会讨论 GPT 与 MBR/MSDOS 分区表的优点,但 GPT 很可能出现在具有 UEFI 的新设备上,特别是如果你在这些设备上安装了 Windows 8。分区工具的状态?讨论面临 GPT 时可以使用哪些工具。
- LVM、ZFS 和 btrfs 完全是另一回事。它们都有附带的工具,您应该使用它们而不是
parted
或fdisk
(除了为它们使用而创建分区的初始步骤)。
使用注意parted
事项:
该程序的语法parted
是:
parted [options] [device [command [options...]...]]
当您parted
不使用命令运行时,例如:
parted /tmp/parted
您将看到一个简单的 shell,您可以在其中运行上述命令。但是,这些命令也可以直接使用该parted
程序运行。因此这三个是等效的:
# parted /tmp/parted
GNU Parted 2.3
Using /tmp/parted
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt
和
# parted
GNU Parted 2.3
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) select /tmp/parted
Using /tmp/parted
(parted) mklabel gpt
和
parted /tmp/parted mklabel gpt
还要注意,使用 创建分区时parted
,分区结束的一个有用指示是-1s
(这是连字符和“s”之间的“1”)。如果您希望分区从指定的开始跨越到磁盘的其余部分,这将非常有用。更具体地说,运行
parted /dev/sda -- mkpart primary ext4 3G -1s
将创建一个/dev/sda
从 3G 开始到磁盘最后一个扇区的分区/dev/sda
(即从 3G 到磁盘的整个剩余部分)。请注意,是--
必需的,因为1s
不会被解释为无效选项。
答案2
首先,您知道如何使用 fdisk 实用程序对硬盘进行实际分区。
Linux 仅允许 4 个主分区。通过细分其中一个主分区,您可以拥有更多逻辑分区。
只有一个主分区可以进行细分。
通过在命令提示符下输入 root fdisk device 来启动 fdisk。
设备可能类似于 /dev/sda 或 /dev/sdb
您需要的基本 fdisk 命令是:
p print the partition table
n create a new partition
d delete a partition
q quit without saving changes
w write the new partition table and exit
对分区表所做的更改直到您发出写入(w)命令后才会生效。
以下是分区表的示例:
Disk /dev/sdb: 64 heads, 63 sectors, 621 cylinders
Units = cylinders of 4032 * 512 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 * 1 184 370912+ 83 Linux
/dev/sdb2 185 368 370944 83 Linux
/dev/sdb3 369 552 370944 83 Linux
/dev/sdb4 553 621 139104 82 Linux swap
例子:
从 shell 提示符启动 fdisk:
sudo su
fdisk /dev/sdb
这表明您正在使用 SATA 控制器上的第二个驱动器。
Command (m for help): p
Disk /dev/hdb: 64 heads, 63 sectors, 621 cylinders
Units = cylinders of 4032 * 512 bytes
That makes for 384Mb per partition.
Now You get to work.
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-621, default 1):<RETURN>
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-621, default 621): +384M
Next, You set up the partition You want to use for swap:
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (197-621, default 197):<RETURN>
Using default value 197
Last cylinder or +size or +sizeM or +sizeK (197-621, default 621): +128M
现在分区表如下所示:
Device Boot Start End Blocks Id System
/dev/sdb1 1 196 395104 83 Linux
/dev/sdb2 197 262 133056 83 Linux
最后,使第一个分区可启动:
Command (m for help): a
Partition number (1-4): 1
And You make the second partition of type swap:
Command (m for help): t
Partition number (1-4): 2
Hex code (type L to list codes): 82
Changed system type of partition 2 to 82 (Linux swap)
Command (m for help): p
最终结果:
Disk /dev/sdb: 64 heads, 63 sectors, 621 cylinders
Units = cylinders of 4032 * 512 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 * 1 196 395104+ 83 Linux
/dev/sdb2 197 262 133056 82 Linux swap
最后,发出写入命令(w)将表写入磁盘。
mkfs 实用程序用于在 Linux 系统上创建文件系统(ext2、ext3、ext4 等)。
您应该向 mkfs 指定要在其上创建文件系统的设备名称。
查看可用的文件系统构建器命令
文件系统构建器(mkfs* 命令)通常在 /sbin/、/sbin/fs、/sbin/fs.d、/etc/fs 和 /etc 等目录中搜索。
如果未找到,它最终搜索 PATH 变量中找到的目录。
以下列表显示了系统中可用的 mkfs* 命令。
sudo su
cd /sbin
ls mkfs*
mkfs mkfs.bfs mkfs.cramfs mkfs.ext2 mkfs.ext3 mkfs.ext4 mkfs.ext4dev
mkfs.minix mkfs.msdos mkfs.ntfs mkfs.vfat
在特定设备上构建文件系统
为了使用 mkfs 命令构建文件系统,所需的参数是设备文件名和文件系统类型,如下所示。
以下示例在 /dev/sdb1 分区上创建 ext4 文件系统。
sudo su
mkfs -t ext4 /dev/sdb1
mke2fs 1.42 (29-Nov-2011)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1120112 inodes, 4476416 blocks
223820 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=0
137 block groups
32768 blocks per group, 32768 fragments per group
8176 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
请注意,mkfs 命令的默认文件系统类型是 ext2。
如果您不指定“-t”选项,它将创建 ext2 文件系统。
另外,您可以使用我们之前讨论的方法来识别您是否拥有 ext2 、 ext3 或 ext4 文件系统。
格式化 NTFS 驱动器
首先,您需要有创建 NTFS 文件系统的能力,因此请安装 ntfsprogs:
sudo su
apt-get install ntfs-3g
其次,删除该分区并将其重新创建为 NTFS。
sudo su
umount /dev/sdb1
fdisk /dev/sdb
Options to select:
‘d’ to delete the partition
‘n’ to create a new partition
‘p’ for primary
‘1’ for partition number
‘Enter’ for first cylinder (default 1)
‘Enter’ for last cylinder (default of max size)
‘t’ for type
‘L’ to list codes, and enter code for HPFS/NTFS. In my case, it’s ‘7’
‘w’ to write changes to disk, and exit
umount /dev/sdb1
在最后一步,您卸载该分区,因为 Ubuntu 为您再次自动安装了它。
现在,您需要创建文件系统。有两种方法可以实现此目的:一种是急躁的方法(快速格式化),另一种是更好但更耗时的方法(完整格式化)。
快速格式化
这只会分配磁盘空间,但不会清空驱动器或检查坏扇区。这意味着需要几秒钟的时间。
sudo su
mkfs.ntfs -f /dev/sdb1
完整格式
如果您更加关心数据完整性并且不介意等待,请执行完整格式化。
这可能需要几个小时才能将大型驱动器清零!
sudo su
mkfs.ntfs /dev/sdb1