Как мне сжать файл VHD с помощью Ubuntu?

9

Я использую Windows Server 2008r2 с ролью Hyper-V. Гостевой системой является Ubuntu 12.04 LTC. Он расположен на динамическом виртуальном жестком диске.

Я хочу сжать этот VHD (реальный размер - 50 ГБ, 360 ГБ на диске). Но я не могу этого сделать, потому что файловая система Ubuntu не является NTFS. Что мне нужно (gparted, sdelete, ...) для решения этой проблемы?

Основная проблема в том, что файловая система не NTFS, а ext4.

Ответ:

1) Скачать systemrescuecd

http://sourceforge.net/projects/systemrescuecd/files/sysresccd-x86/3.8.1/systemrescuecd-x86-3.8.1.iso/download

2) Добавьте этот .iso в квест ОС Ubuntu

3) Запустите эту виртуальную машину

4) Используйте нулевой

zerofree /dev/sda1

5) Выключите эту виртуальную машину

6) Используйте диспетчер Hyper-V (Правка -> Дефрагментация)

Этот VHD был 360 Гб. Сейчас 70 гб.

AmShegar
источник
1
Если вы хотите ответить на свой вопрос, отправьте ответ , а не редактируйте сам вопрос.
Массимо
рассмотреть fstrimв 2019 году, особенно для ext4 под LVM superuser.com/questions/1491437/…
Алек Истомин

Ответы:

6

Выключите виртуальную машину, сделайте резервную копию виртуального жесткого диска и запустите другую виртуальную машину (я использую SystemRescueCD, поскольку она небольшая и быстрая), на которой доступен раздел ext4, то есть HD для SysRescue (но не монтируйте его!). На виртуальной машине SysRescue запустите zerofree на разделе ext4, выключите эту виртуальную машину , а затем используйте свой веб-сайт администрирования для сжатия виртуального жесткого диска .

rickhg12hs
источник
Я начинаю делать это (скачать SystemRescueCD, затем zerofree / dev / sda1), но я не знаю, могу ли я сжать этот виртуальный жесткий диск в Windows (ведь свободное место будет нулевым)
AmShegar
1
Попробуйте диспетчер Hyper-V .
rickhg12hs
3

Я могу подтвердить: zerofree работает для сжатия файлов виртуального диска

НО: вам не нужно использовать аварийные компакт-диски или монтировать VHDX на другой виртуальной машине:

sudo apt-get install zerofree

Загрузитесь в безопасном режиме, затем запустите:

zerofree /dev/sda1

После этого мы должны начать оптимизацию для файла виртуального диска. На сервере, на котором размещен файл VHDX, создайте следующий файл ShrinkVhdx.ps1:

[CmdletBinding()]
Param(
    $VHDFiles
)

    #Find the disks
    foreach($VHD in $VHDFiles){
        Write-Verbose "Working on $VHD, please wait"
        Write-Verbose "Current size $([math]::truncate($(Get-VHD -Path $VHD).FileSize/ 1GB)) GB"
        Mount-VHD -Path $VHD -NoDriveLetter -ReadOnly
        Optimize-VHD -Path $VHD -Mode Full
        Write-Verbose "Optimize size $([math]::truncate($(Get-VHD -Path $VHD).FileSize/ 1GB)) GB"
        Dismount-VHD -Path $VHD
        Write-Verbose ""
        }

А теперь запустите файл и наслаждайтесь освобожденным дисковым пространством :-)

ShrinkVhdx.ps1 .\hdd1.vhdx
Jochen
источник
Это зависит от файловой системы, если это XFS, вам не повезло, используя zerofree.
Брэд
1

Процесс, кажется,

  • Сделайте резервную копию вашего текущего файла VHD.
  • Используйте менеджер снимков, чтобы удалить / объединить любые снимки.
  • Ноль заполняет неиспользуемое дисковое пространство

а именно

sudo apt-get install secure-delete 
sudo sfill -llz .

Это создает файл с именем oooooooo.oooзаполнены с 0. Вы должны повторить команду sfill на всех разделах, я думаю.

Обратите внимание, что это не быстро, это займет несколько часов, если не дней, чтобы завершить.

  • компактный
  • прибыль
user9517
источник
спасибо, но у меня нет интернета на машине с Hyper-V и VHD с Linux. Поэтому я не могу сделать «sudo apt-get install secure-delete»
AmShegar
1

1) Скачать systemrescuecd

http://sourceforge.net/projects/systemrescuecd/files/sysresccd-x86/3.8.1/systemrescuecd-x86-3.8.1.iso/download

2) Добавьте этот .iso в квест ОС Ubuntu

3) Запустите эту виртуальную машину

4) Используйте нулевой

zerofree / dev / sda1

5) Выключите эту виртуальную машину

6) Используйте диспетчер Hyper-V (Правка -> Дефрагментация)

AmShegar
источник
Диспетчер Hyper-V не имеет (Правка -> Дефрагментация)
Брэд
0

Я попытался запустить Systemrescuecd на машине второго поколения. Но это не сработало, поэтому я создал новую машину первого поколения и добавил к ней VHDX. systemrescuecd запущен. Я не делал никаких операций. Убрал машину 1-го поколения и вставил VHDX обратно в оригинальную машину. Тогда Ubuntu вообще не запускалась. Только Grub-меню.

Смотрите мой пост здесь: Hyper-V Ubuntu vhdx scsi ide

Так что знайте об этом и делайте резервную копию (на этот раз я этого не делал) ...

Сэм
источник
0

Вы можете сделать это, проверив некоторые параметры в следующих файлах: / sys / block // queue / discard_granularity / sys / block // queue / discard_max_bytes, если любой из них имеет 0, он, вероятно, не поддерживается конфигурацией вашего оборудования + программного обеспечения.

Вот полный учебник по этому вопросу: http://www.1337admin.org/uncategorized/compacting-virtual-disks-on-generation-2-linux-hyper-v-2012-r2-vms/

штифтик
источник