Это общий вопрос, особенно в современной среде виртуальных сред. К сожалению, ответ не так прост, как можно предположить.
dd является очевидным первым выбором, но dd по сути является копией, и это заставляет вас записывать каждый блок данных (таким образом, инициализируя содержимое файла) ... И эта инициализация - это то, что отнимает так много времени ввода-вывода , (Хотите, чтобы это заняло еще больше времени? Используйте / dev / random вместо / dev / zero ! Тогда вы будете использовать процессор и время ввода-вывода!) В В конце концов, dd - плохой выбор (хотя по умолчанию виртуальная машина по умолчанию "создает" GUI). Например:
dd if=/dev/zero of=./gentoo_root.img bs=4k iflag=fullblock,count_bytes count=10G
усечение - другой выбор - и, вероятно, самый быстрый ... Но это потому, что он создает "разреженный файл". По сути, разреженный файл - это раздел диска, который содержит много одинаковых данных, и основная файловая система «обманывает», на самом деле не сохраняя все данные, а просто «притворяясь», что все это есть. Таким образом, когда вы используете усечение для создания 20 ГБ диска для вашей виртуальной машины, файловая система фактически не выделяет 20 ГБ, но обманывает и говорит, что там есть 20 ГБ нулей, хотя всего одна дорожка на диске может фактически (действительно) использоваться. E.g.:
truncate -s 10G gentoo_root.img
fallocate является окончательным - и наилучшим - выбором для использования с диском виртуальных машин, поскольку он по существу «резервирует» (или «выделяет») все пространство, которое вы ищете, но ничего не пишите. Поэтому, когда вы используете fallocate для создания виртуального дискового пространства объемом 20 ГБ, вы действительно получаете файл размером 20 ГБ (а не «разреженный файл», и вы не потрудитесь написать что-нибудь на него - а это значит, что там может быть что угодно - что-то вроде нового диска!) Например:
fallocate -l 10G gentoo_root.img