让losetup读取分区表

时间:2016-05-14 13:25:49

标签: linux

为了学习,我想创建一个我的硬盘的迷你副本:

$ lsblk

NAME                  MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda                     8:0    0 931.5G  0 disk  
├─sda1                  8:1    0   512M  0 part  /boot/efi
├─sda2                  8:2    0   244M  0 part  /boot
└─sda3                  8:3    0 930.8G  0 part  
  └─sda3_crypt        254:0    0 930.8G  0 crypt 
    ├─host--vg-root   254:1    0    25G  0 lvm   /
    ├─host--vg-var    254:2    0   2.8G  0 lvm   /var
    ├─host--vg-swap_1 254:3    0  11.9G  0 lvm   [SWAP]
    ├─host--vg-tmp    254:4    0   380M  0 lvm   /tmp
    └─host--vg-home   254:5    0   890G  0 lvm   /home

在我的特定情况下,设置一个新设备,看起来我的硬盘需要熟悉很多东西,创建分区,创建LUKS设备,打开它们,创建LVM卷等,所以我认为这是一个值得做的练习,至少对于刚接触Linux的人来说。

所以我首先需要一个新设备来玩,而不会弄乱别的东西:

$ dd if=/dev/zero of=loopfile bs=1M count=1024
$ sudo losetup /dev/loop1 loopfile

(使用loop1而非loop0已经用于某些其他目的,zero对于此练习也足够好,因此忽略urandom

我的第一个目标是模仿分区sda1/sda2/sda3

$ sudo blkid

/dev/sda1: UUID="08FC-EA23" TYPE="vfat" ...
/dev/sda2: UUID="30b5d595-4986-4f75-962a-7e1f5f03ed4a" TYPE="ext2" ...
/dev/sda3: UUID="a84cc598-9316-48b9-94a9-bb4885e45e9c" TYPE="crypto_LUKS" ...

$ sudo parted /dev/loop1

所以我去创建了三个'主要'分区(第一个使用'fat32',其他两个使用'ext2',不太确定为什么只是猜测),所有尺寸减少了1000倍:

(parted) print

Number  Start   End     Size    Type     File system  Flags
1      512B    1000kB  1000kB  primary  fat32        lba
2      1049kB  2097kB  1049kB  primary  ext2         lba
3      2097kB  1074MB  1072MB  primary  ext2         lba

然后我将这三个设备格式化为与之前的blkid报告一致:

sudo mkfs -t vfat /dev/loop1p1
sudo mkfs -t ext2 /dev/loop1p2
sudo cryptsetup luksFormat /dev/loop1p3

所以在这一点上,我的分手print报告和lsblk和blkid一样好看:

$ lsblk

loop1                   7:1    0     1G  0 loop  
├─loop1p1             259:0    0 976.5K  0 loop  
├─loop1p2             259:1    0     1M  0 loop  
└─loop1p3             259:2    0  1022M  0 loop

$ sudo blkid

/dev/loop1p1: SEC_TYPE="msdos" UUID="1CD8-2CA5" TYPE="vfat" ...
/dev/loop1p2: UUID="6532dba9-3101-488e-a6d1-e5e1ef4943f7" TYPE="ext2" ...
/dev/loop1p3: UUID="a0e96a54-6d6a-49c8-80fd-03217b25062f" TYPE="crypto_LUKS" ...
/dev/loop1: PTUUID="1de285f7" PTTYPE="dos"

所以我认为我走在了正确的轨道上。我还认为我的循环设备基础的文件loopfile将包含必要的元数据,因此我不必担心重新启动。由于我只使用设备(不安装它们),我认为不需要任何/etc/fstab设置......

我遇到的问题是,当我重新启动时,某些设置似乎丢失了。从loopfile重新创建循环设备后,parted print报告仍会显示分区(尽管type上的信息丢失),但这些分区不再出现在lsblkblkid报告中。我想知道是否有办法使我的设置持久。我在Debian 8上,如果这很重要的话。

1 个答案:

答案 0 :(得分:1)

您需要运行losetup -P /dev/loop1 loopfile。这样做是告诉内核对新添加的文件执行分区表扫描。