Linux 如何从现有分区创建循环分区

Linux 如何从现有分区创建循环分区,linux,command-line,partitioning,Linux,Command Line,Partitioning,我相信/images/backups正在使用/images中的空间 /dev/sdb1 820G 645G 135G 83% /images /dev/loop0 296G 296G 0 100% /images/backups 我在另一台机器上有一个类似的分区/images,免费500G,我想拿出350G用于/images/备份,怎么做 这是一个简单的循环挂载,可以提供指定的空间量,还是我们应该创建一个所需大小和挂载的空文件?如果

我相信/images/backups正在使用/images中的空间

/dev/sdb1             820G  645G  135G  83% /images
/dev/loop0            296G  296G     0 100% /images/backups
我在另一台机器上有一个类似的分区/images,免费500G,我想拿出350G用于/images/备份,怎么做


这是一个简单的循环挂载,可以提供指定的空间量,还是我们应该创建一个所需大小和挂载的空文件?如果是这样,应该使用哪些装载选项来指定大小?

您需要创建具有固定大小的目标,但可以使用“稀疏文件”,该文件实际上尚未写入任何块(因此在写入之前不会实际占用空间)

例如:

dd if=/dev/zero of=file.img bs=1 count=0 seek=20G
将创建一个预分配到20GB的稀疏文件。也就是说,实际上预先将20GB的零写入磁盘(使文件不稀疏)将加快写入速度并减少碎片

可以使用losetup命令将其连接到环回设备,创建文件系统,然后安装:

losetup /dev/loop1 file.img
mke2fs -j /dev/loop1
mount /dev/loop1 /mnt/somewhere
如果您想知道现有文件是否稀疏,下面的方法就可以了(在使用GNU工具的系统上;纯POSIX环境中不支持以下部分):

{
读取块\计数块\大小文件\大小
如果((块计数*块大小<文件大小)),则
回声“稀疏”
其他的
回声“非稀疏”
fi

}<这实际上还不足以知道文件backing/dev/loop0在哪里--它可能是也可能不是/images。“losetup”命令将告诉您。losetup/dev/loop0/dev/loop0:[0811]:45585(/images/backups.img),所以它是一个在该分区中创建的空文件?关于它没有“空”的内容,但是是的,它存在于/images中……顺便说一句,在将来,ServerFault可能是解决此类问题的更好的地方(与其说是编程,不如说是系统管理)。
{
    read block_count block_size file_size
    if (( block_count * block_size < file_size )) ; then
        echo "Sparse"
    else
        echo "Non-Sparse"
    fi
} < <(stat --format='%b %B %s'$'\n' /images/backups.img)