我对 Linux 还比较陌生。
我想知道 Linux 是否有类似于 Windows 的交换文件?(如果有,我该如何更改它的位置?)
我的 Linux 主硬盘空间不足,我换了一个新硬盘并挂载了它。有没有一种通用方法可以将所有未来的应用程序安装(以及其他安装)重定向到新硬盘?
答案1
如果你愿意做出颠覆性的改变,我建议使用 Linux 的逻辑卷管理器 (LVM2)。
它允许您将多个不同大小的磁盘组合在一起,并且您可以添加磁盘以增加逻辑“磁盘”的表观大小,而无需重新启动。如果您使用的是默认文件系统(ext4
目前),它还可以执行文件系统的在线调整大小,因此同样无需重新启动。
让我使用 RAM 磁盘 (/dev/ram0
通过/dev/ram15
) 来演示这一点。首先,让我们查看系统中的分区:
# lvmdiskscan
/dev/ram0 [ 64.00 MiB]
/dev/ram1 [ 64.00 MiB]
/dev/sda1 [ 87.16 GiB]
/dev/ram2 [ 64.00 MiB]
/dev/ram3 [ 64.00 MiB]
/dev/ram4 [ 64.00 MiB]
/dev/ram5 [ 64.00 MiB]
/dev/sda5 [ 6.00 GiB]
/dev/ram6 [ 64.00 MiB]
/dev/ram7 [ 64.00 MiB]
/dev/ram8 [ 64.00 MiB]
/dev/ram9 [ 64.00 MiB]
/dev/ram10 [ 64.00 MiB]
/dev/ram11 [ 64.00 MiB]
/dev/ram12 [ 64.00 MiB]
/dev/ram13 [ 64.00 MiB]
/dev/ram14 [ 64.00 MiB]
/dev/ram15 [ 64.00 MiB]
/dev/sdb1 [ 294.09 GiB]
/dev/sdb5 [ 4.00 GiB]
0 disks
20 partitions
0 LVM physical volume whole disks
0 LVM physical volumes
因此,让我们创建一个 2 磁盘设置,稍后我将把它扩展到 3 磁盘。首先,格式化我的“磁盘”以供 LVM 使用。此步骤中的pv
代表物理卷,即存储数据的真实设备:
# pvcreate /dev/ram0
Physical volume "/dev/ram0" successfully created
# pvcreate /dev/ram1
Physical volume "/dev/ram1" successfully created
# pvs
PV VG Fmt Attr PSize PFree
/dev/ram0 vg_main lvm2 a- 60.00m 60.00m
/dev/ram1 vg_main lvm2 a- 60.00m 60.00m
然后创建一个卷组,该卷组本质上将它们合并为一个未分区的“磁盘”:
# vgcreate vg_main /dev/ram0 /dev/ram1
Volume group "vg_main" successfully created
# vgs
VG #PV #LV #SN Attr VSize VFree
vg_main 2 0 0 wz--n- 120.00m 120.00m
现在通过创建逻辑卷来“分区”这个连接的磁盘。我将使用所有可用空间:
# lvcreate --extents 100%VG --name lv_main vg_main
Logical volume "lv_main" created
# lvs
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
lv_main vg_main -wi-a- 120.00m
现在我有一个 120MB 的虚拟分区,可以存储我的东西。可以使用更详细的lvdisplay
命令找到设备节点:
# lvdisplay
--- Logical volume ---
LV Name /dev/vg_main/lv_main
VG Name vg_main
LV UUID tsKWeD-tjpB-yh32-Ong3-Jp7C-erT8-LRVlTg
LV Write Access read/write
LV Status available
# open 0
LV Size 120.00 MiB
Current LE 30
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 252:0
因此我应该将文件系统放在 上/dev/vg_main/lv_main
。这可能意味着使用 之类的工具复制现有文件系统dd
,或者在此演示中创建一个新文件系统:
# mkfs.ext4 -L fs_main /dev/vg_main/lv_main
mke2fs 1.42 (29-Nov-2011)
Discarding device blocks: done
Filesystem label=fs_main
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
30720 inodes, 122880 blocks
6144 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67371008
15 block groups
8192 blocks per group, 8192 fragments per group
2048 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729
Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
所以现在我可以挂载这个(空)文件系统并用一些测试数据填充它:
# mkdir /tmp/demo
# mount /dev/vg_main/lv_main /tmp/demo
# df -h /tmp/demo
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_main-lv_main 117M 5.6M 105M 6% /tmp/demo
# ls /tmp/demo
lost+found
# dd if=/dev/zero of=/tmp/demo/bigfile
dd: writing to `/tmp/demo/bigfile': No space left on device
226701+0 records in
226700+0 records out
116070400 bytes (116 MB) copied, 0.982532 s, 118 MB/s
# ls -lh /tmp/demo
total 111M
-rw-r--r-- 1 root root 111M Mar 10 18:50 bigfile
drwx------ 2 root root 12K Mar 10 18:47 lost+found
我的文件系统现在已经完全满了!这可以在文件系统级别使用df
和连接磁盘级别使用vgdisplay
并检查可用 PE(物理范围)/大小(字节)进行验证:
# df -h /tmp/demo
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_main-lv_main 117M 117M 0 100% /tmp/demo
# vgdisplay
--- Volume group ---
VG Name vg_main
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 2
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 2
Act PV 2
VG Size 120.00 MiB
PE Size 4.00 MiB
Total PE 30
Alloc PE / Size 30 / 120.00 MiB
Free PE / Size 0 / 0
VG UUID zWxBml-xdZU-8wgh-IK1w-ij1N-Z3eo-sRtri3
现在让我们把它变大一点!假设这/dev/ram2
是一个可爱的新 SATA 磁盘,我刚刚将它热插入到正在运行的系统中,我想用它来增加我的完整文件系统的大小。
与前面一样,使用pvcreate
准备用于 LVM 的“磁盘”:
# pvcreate /dev/ram2
Physical volume "/dev/ram2" successfully created
现在我们扩展我们的连接磁盘(卷组)并验证是否vg_main
有一些可用空间:
# vgextend vg_main /dev/ram2
Volume group "vg_main" successfully extended
# vgdisplay
--- Volume group ---
VG Name vg_main
System ID
Format lvm2
Metadata Areas 3
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 3
Act PV 3
VG Size 180.00 MiB
PE Size 4.00 MiB
Total PE 45
Alloc PE / Size 30 / 120.00 MiB
Free PE / Size 15 / 60.00 MiB
VG UUID zWxBml-xdZU-8wgh-IK1w-ij1N-Z3eo-sRtri3
但是,这还没有在我们的文件系统中释放任何空间,因为“分区”(逻辑卷)的大小与我们添加新磁盘之前的大小相同:
# df -h /tmp/demo
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_main-lv_main 117M 117M 0 100% /tmp/demo
# lvdisplay
--- Logical volume ---
LV Name /dev/vg_main/lv_main
VG Name vg_main
LV UUID tsKWeD-tjpB-yh32-Ong3-Jp7C-erT8-LRVlTg
LV Write Access read/write
LV Status available
# open 1
LV Size 120.00 MiB
Current LE 30
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 252:0
魔法来了——我们调整逻辑卷的大小,并告诉 LVM2 调整文件系统的大小:
# lvresize --extents 100%VG --resizefs /dev/vg_main/lv_main
fsck from util-linux 2.20.1
e2fsck 1.42 (29-Nov-2011)
/dev/mapper/vg_main-lv_main is mounted.
WARNING!!! The filesystem is mounted. If you continue you ***WILL***
cause ***SEVERE*** filesystem damage.
Do you really want to continue<n>?
这个可怕的警告实际上与调整大小fsck
文件系统,而是LVM2 想要对已挂载文件系统进行的预检。显然,我们拒绝了这个可怕的提示并回答“不”:
Do you really want to continue<n>? no
check aborted.
Extending logical volume lv_main to 180.00 MiB
Logical volume lv_main successfully resized
resize2fs 1.42 (29-Nov-2011)
Filesystem at /dev/dm-0 is mounted on /tmp/demo; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/dm-0 to 184320 (1k) blocks.
The filesystem on /dev/dm-0 is now 184320 blocks long.
然后 LVM2 继续执行我们请求的文件系统的在线调整大小。好了!
# df -h /tmp/demo
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_main-lv_main 175M 117M 49M 71% /tmp/demo
我现在可以再次创建更多文件:
# dd if=/dev/zero of=/tmp/demo/another_file
dd: writing to `/tmp/demo/another_file': No space left on device
118751+0 records in
118750+0 records out
60800000 bytes (61 MB) copied, 0.556078 s, 109 MB/s
# ls -lh /tmp/demo
total 169M
-rw-r--r-- 1 root root 58M Mar 10 19:04 another_file
-rw-r--r-- 1 root root 111M Mar 10 18:52 bigfile
drwx------ 2 root root 12K Mar 10 18:47 lost+found
答案2
1)Linux 没有交换文件,Linux 有交换分割。您可以在初始设置后以 root 身份编辑 /etc/fstab 文件来更改其位置以更改交换分区,但您需要创建另一个。
2)我不知道有什么简单的方法可以实现这一点,因为 Linux 将可执行文件分散存储在系统目录中。