- Sparse file
- Contents
- Creating sparse files
- Making existing files sparse
- Formatting the file with a filesystem
- Mounting the file at boot
- Copying the sparse file
- Copying with cp
- Archiving with tar
- Resizing the sparse file
- Growing the file
- Подробная информация о разреженных файлах в Linux
- How to create sparse files in Linux using ‘dd’ command
- What are sparse files
- creating sparse files
- How to copy a sparse file
- Гайд для новичков. Разреженные файлы в Windows, Linux и MacOS, файловых систем NTFS, REFS, Ext3, Ext4, BTRFS и APFS
- Разница между сжатием и разреженными файлами
- Преимущества и недостатки
- Создаем разреженный файл в Windows
- Как создать разреженный файл в Linux
- Как увеличить
- Разреженные файлы в ApFS
- Заключение
Sparse file
According to Wikipedia, in computer science, a sparse file is a type of computer file that attempts to use file system space more efficiently when blocks allocated to the file are mostly empty. This is achieved by writing brief information (metadata) representing the empty blocks to disk instead of the actual «empty» space which makes up the block, using less disk space. The full block size is written to disk as the actual size only when the block contains «real» (non-empty) data.
When reading sparse files, the file system transparently converts metadata representing empty blocks into «real» blocks filled with zero bytes at runtime. The application is unaware of this conversion.
Most modern file systems support sparse files, including most Unix variants and NTFS, but notably not Apple’s HFS+. Sparse files are commonly used for disk images (not to be confused with sparse images), database snapshots, log files and in scientific applications.
The advantage of sparse files is that storage is only allocated when actually needed: disk space is saved, and large files can be created even if there is insufficient free space on the file system.
Disadvantages are that sparse files may become fragmented; file system free space reports may be misleading; filling up file systems containing sparse files can have unexpected effects; and copying a sparse file with a program that does not explicitly support them may copy the entire file, including the empty blocks which are not on explicitly stored on the disk, which wastes the benefits of the sparse property of the file.
Contents
Creating sparse files
The truncate utility can create sparse files. This command creates a 512 MiB sparse file:
The dd utility can also be used, for example:
Sparse files have different apparent file sizes (the maximum size to which they may expand) and actual file sizes (how much space is allocated for data on disk). To check the file’s apparent size, just run:
and, to check the actual size of the file on disk:
As you can see, although the apparent size of the file is 512 MiB, its «actual» size is really zero—that’s because due to the nature and beauty of sparse files, it will «expand» arbitrarily to minimize the space required to store its contents.
Making existing files sparse
The fallocate utility can make existing files sparse on supported file systems:
Formatting the file with a filesystem
This article or section needs language, wiki syntax or style improvements. See Help:Style for reference.
Now that we have created the sparse file, it is time to format it with a filesystem; for example ReiserFS:
We can now check its size to see how the filesystem has affected it:
As you may have expected, formatting it with the filesystem has increased its actual size, but left its apparent size the same. Now we can create a directory which we will use to mount our file:
Tada! We now have both a file and a folder into which we may store almost 512 MiB worth of information!
Mounting the file at boot
To mount the sparse image automatically at boot, add an entry to your fstab:
Copying the sparse file
Copying with cp
Normally, cp is good at detecting whether a file is sparse, so it suffices to run:
Then new_file.img will be sparse. However, cp does have a —sparse=when option. This is especially useful if a sparse file has somehow become non sparse (i.e. the empty blocks have been written out to disk in full). Disk space can be recovered by:
Archiving with tar
This article or section needs language, wiki syntax or style improvements. See Help:Style for reference.
One day, you may decide to back up your well-loved sparse file, and choose the tar utility for that very purpose; however, you soon realize you have a problem:
Apparently, even though the current size of the sparse file is only 33 MB, archiving it with tar created an archive of the ENTIRE SIZE OF THE FILE! Luckily for you, though, tar has a `—sparse’ (`-S’) flag, that when used in conjunction with the `—create’ (`-c’) operation, tests all files for sparseness while archiving. If tar finds a file to be sparse, it uses a sparse representation of the file in the archive. This is useful when archiving files, such as dbm files, likely to contain many nulls, and dramatically decreases the amount of space needed to store such an archive.
Resizing the sparse file
This article or section needs language, wiki syntax or style improvements. See Help:Style for reference.
Before we resize the file, let us populate it with a couple small files for testing purposes:
Now, let us add some content to one of the files:
Growing the file
Should you ever need to grow the file, you may do the following:
This will increase its size to 1 Gb, and leave its information intact. Next, we need to increase the size of its filesystem:
Источник
Подробная информация о разреженных файлах в Linux
У меня есть разреженный файл, в котором размещены только некоторые блоки:
Я хотел бы знать, какие блоки файла на самом деле выделены. Есть ли системный вызов или интерфейс ядра, который можно использовать для получения списка распределений или дыр в файле?
Простая проверка на наличие достаточно длинной строки нулей (подход, используемый GNU cp, rsync и т. Д.) Не работает правильно:
Это обнаружило другие последовательности нулей, которые были фактически распределены.
Есть похожий вопрос по SO . Принято в настоящее время ответ на @ephemient предлагает используя ioctl называется , fiemap которая описана в linux/Documentation/filesystems/fiemap.txt . Цитирование из этого файла:
Fiemap ioctl — это эффективный метод для пространства пользователя для получения отображений экстентов файлов. Вместо блочного отображения (такого как bmap) fiemap возвращает список экстентов.
Похоже, это та информация, которую вы ищете. Поддержка файловыми системами снова необязательна:
Файловые системы, желающие поддерживать fiemap, должны реализовать ->fiemap обратный вызов в своей inode_operations структуре.
Поддержка для SEEK_DATA и SEEK_HOLE аргументы lseek вы , упомянутые в Solaris была добавлена в Linux 3.1 согласно странице человека , так что вы можете использовать это , как хорошо. В fiemap ioctl более старом, так что может быть более переносимыми между различными версиями Linux на данный момент, в то время как lseek может быть более переносимы между операционными системами , если Solaris имеет то же самое.
Источник
How to create sparse files in Linux using ‘dd’ command
What are sparse files
Sparse files are files that have large amounts of space preallocated to them, without occupying the entire amount from the filesystem. They are useful for reducing the amount of time and disk space involved in creating loop filesystems or large disk images for virtualized guests, among other things. Sparse files are commonly used for disk images, database snapshots, log files, etc.
Advantage of sparse files
The advantage of sparse files is that storage is only allocated when actually needed: disk space is saved, and large files can be created even if there is insufficient free space on the file system.
Disadvantage of sparse files
Disadvantages are that sparse files may become fragmented. The file system free space reports may be misleading and copying a sparse file with a program that does not explicitly support them may copy the entire, uncompressed size of the file, including the sparse, mostly zero sections which are not on disk – losing the benefits of the sparse property in the file.
We can see this behavior with /var/log/lastlog file.
creating sparse files
1. Sparse files can be created using the ‘dd‘ command’s ‘seek‘ option.
2. To see disk usage of file with “ls” command we can use “-s” option:
3. To see apparent size of the file using “du” we can use “–apparent-size” option:
How to copy a sparse file
Copying a sparse file with a program that does not explicitly support them may copy the entire, uncompressed size of the file, including the sparse. So, when you copy a sparse file using cp command, the destination file gets changed to a fully allocated file. To copy a sparse file by keeping the destination copy as a sparse file, use any of the below commands.
Источник
Гайд для новичков. Разреженные файлы в Windows, Linux и MacOS, файловых систем NTFS, REFS, Ext3, Ext4, BTRFS и APFS
В этой статье пойдет речь о разреженных файлах. Расскажем об их недостатках и достоинствах, какие файловые системы поддерживают такие файлы. А также, как создавать или преобразовать их из обычных. Статья для новичков.
Разреженные – это специальные файлы, которые с большей эффективностью используют файловую систему, они не позволяют ФС занимать свободное дисковое пространство носителя, когда разделы не заполнены. То есть, «пустое место» будет задействовано только при необходимости. Пустая информация в виде нулей, будет хранится в блоке метаданных ФС. Поэтому, разреженные файлы изначально занимают меньший объем носителя, чем их реальный объем.
Этот тип поддерживает большинство файловый систем: BTRFS, NILFS, ZFS, NTFS, ext2, ext3, ext4, XFS, JFS, ReiserFS, Reiser4, UFS, Rock Ridge, UDF, ReFS, APFS, F2FS.
Все эти ФС полностью поддерживают такой тип, но в тоже время не предоставляют прямой доступ к их функциям по средством своего стандартного интерфейса. Управлять их свойствами можно только через команды командной строки.
Разница между сжатием и разреженными файлами
Все файловые системы, которые я назвал выше, также поддерживают стандартную функцию сжатия. Оба этих инструмента дают преимущество в виде экономии места на диске, но достигают этой цели по-разному. Основным недостатком использования сжатия является то, что это может снизить производительность системы при выполнении операции чтения\ записи. Так как будут использоваться дополнительные ресурсы для распаковки или сжатия данных. Но некоторые программные продукты не поддерживают сжатие.
Преимущества и недостатки
Самым большим преимуществом разреженных файлов является то, что пользователь может создавать файлы большого размера, которые занимают очень мало места для хранения. Пространство для хранения выделяется автоматически по мере записи на него данных. Разреженные файлы большого объема создаются за относительно короткое время, поскольку файловой системе не требуется предварительно выделять дисковое пространство для записи нулей.
Преимущества ограничены лишь приложениями, которые их поддерживают. Если у программы нет возможности распознавать или использовать их, то она сохранит их в исходном – несжатом состоянии, что не даст никаких преимуществ. Также с ними нужно быть осторожными, поскольку разреженный файл размером всего несколько мегабайт может внезапно увеличиться до нескольких гигабайт, когда неподдерживающие приложения скопируют его в место назначения.
Еще один из недостатков — это то, что нельзя скопировать или создать такой файл, если его номинальный размер превышает доступный объем свободного пространства (или ограничения размера квоты, налагаемые на учетные записи пользователей). Например, если исходный размер (со всеми нулевыми байтами) составляет 500 МБ, а для учетной записи пользователя, используемой для его создания, существует предел квоты в 400 МБ. Это приведет к ошибке даже если фактическое дисковое пространство, занимаемое им, составляет всего 50 МБ на диске.
Что касается накопителей, на которых хранятся такие данные, то они также подвержены фрагментации, поскольку файловая система будет записывать данные в разреженные файлы по мере необходимости. Со временем это может привести к снижению производительности. Кроме того, некоторые утилиты для управления дисками могут неточно отображать объем доступного свободного места. Когда файловая система почти заполнена, это может привести к неожиданным результатам. Например, могут возникать ошибки «переполнения диска», когда данные копируются поверх существующей части, которая была помечена как разреженная.
Создаем разреженный файл в Windows
Для этого в ОС Windows будем использовать командную строку. В поиске пишем cmd и запускаем ее от имени администратора.
В Windows для управления такими данными используют программу fsutil (утилита файловой системы). При выполнении create, по умолчанию файл создается самый обычный. Переходим в папку где нужно его создать и вводим:
fsutil file createnew sparse-file 1000000000
Где sparse-file – имя, а в конце указан его размер в байтах.
Чтобы присвоить файлу значение «разреженный» вводим:
fsutil sparse setflag sparse-file
Для удаления этого флага выполняется следующая команда:
fsutil sparse setflag sparse-file 0
И чтобы снова присвоить атрибут:
fsutil sparse setflag sparse-file
fsutil sparse queryflag sparse-file
Сам по себе атрибут ещё не приводит к экономии дискового пространства. Для этого нужно разметить пустую область, которая будет освобождена внутри.
Для пометки пустой области введите:
fsutil sparse setrange sparse-file 0 1000000000
В конце указывается смещение и длина, они задаются в байтах. В моем случае от нуля до 1Гб.
Для установки полностью разреженного файла указываем полный объем. Если нужно можно расширить файл указав здесь большее значение.
Для того чтобы убедиться, что файлу присвоен данный атрибут выполним layout
fsutil file layout sparse-file
Такой Атрибут можно задать любому файлу. Просто выполнив эту команду с его именем и задать нужный вам размер.
В свойствах созданного ранее файла можно увидеть, что при размере в 1Гб. файл занимает на диске 0 байт.
Данный набор команд подходит для всех файловых систем Windows, которые поддерживают данный тип данных (NTFS, ReFS и т.д.).
Как создать разреженный файл в Linux
В Linux процесс создания таких типов данных немного проще, поскольку существует несколько команд для их создания. Этот набор подойдет для всех файловых систем Linux.
Здесь можно использовать команду dd, либо truncate.
Первая команда имеет следующий вид:
dd if=/dev/zero of=file-sparse bs=1 count=0 seek=2G
Где file-sparse – имя, и в конце указан его размер, можно задать в байтах, мегабайтах и т.д.
Вторая команда проще, она имеет такой вид:
truncate -s2G file-sparse
Где значение s – указывает размер, после которого идет имя.
По сравнению с Windows, в Linux при создании такого файла одной из команд, он будет «разреженным» по умолчанию.
Для преобразования обычного в разреженный, есть отдельная команда:
cp —sparse=always ./025.jpg ./0251.jpg
Где 025.jpg – первое имя обычного.
0251.jpg – и второе имя разреженного.
Как увеличить
Если вам нужно увеличить уже существующий файл воспользуйтесь первой командой, здесь замените имя и укажите нужный размер.
dd if=/dev/zero of=025.jpg bs=1 count=0 seek=2G
Это увеличит его размер до 2 Гб.
Для проверки размера выполним такую команду:
du -h —apparent-size 025.jpg
Разреженные файлы в ApFS
По сути, данный набор команд подходит и для файловой системы apple – ApFS, так как Linux и MacOS используют в своей основе архитектуру ядра Unix, они обе предоставляют доступ к Unix-командам и оболочке Bash.
Запустите терминал и выполните любую из команд, которую я использовал в Linux.
В MacOS Catalina работает только первая команда, и размер нужно указывать в байтах, иначе в результате команда выведет ошибку.
sudo dd if=/dev/zero of=sparse_APFS bs=1 count=0 seek=1000000000
Файловая система ApFS при соблюдении определенных условий создает разреженные файлы по умолчанию, поэтому для увеличения любого файла можно использовать команду:
dd if=/dev/zero of=187.jpg bs=1 count=0 seek=500000000
Зададим размер, к примеру, 500Мб, в MacOS размер нужно указывать в байтах.
В свойствах можно увидеть, что его размер увеличился до 500 Mb.
Заключение
Перед использованием этого функционала в любых ОС вам крайне важно узнать все их преимущества и недостатки. Знание этих особенностей гарантировано позволит вам избежать потенциальных проблем в будущем.
Полную версию статьи со всеми дополнительными видео уроками смотрите в источнике. А также зайдите на наш Youtube канал, там собраны более 400 обучающих видео.
Источник