Linux 安装交换和磁盘

Linux 安装交换和磁盘

我对 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 将可执行文件分散存储在系统目录中。

相关内容