Як я можу переключити 32-бітну установку на 64-бітну?


54

У мене 32-розрядна установка Ubuntu працює на 64-бітному обладнанні. Тепер, коли багато-арка була реалізована , я хотів би перейти на 64-бітне без необхідності перевстановлення ОС.

Це одна з історій користувачів, на яку звертається специфікація :

Шон встановив свою систему, використовуючи 32-бітну версію Ubuntu, але його обладнання 64-бітне і він хоче переключитися. Він вручну встановлює версії dpkg та apt amd64, замінюючи версії i386 та змінюючи архітектуру, яка використовується за замовчуванням; потім він встановлює пакет amd64 ubuntu-minimal; потім він встановлює пакет amd64 ubuntu-desktop. З часом решта пакетів i386 автоматично замінюються під час оновлення.

Однак, намагаючись дотримуватися вказівок там, я не можу знайти 64-бітну версію dpkg або apt.

Чи ця історія користувача по-іншому реалізована в кінцевій специфікації, чи потрібно щось робити інакше?

Коротше кажучи, як я можу переключити свою 32-бітну установку на 64-бітну?


3
Я усвідомлюю, що питання вже задавались на askubuntu.com/questions/5018/… , але це було до того, як було здійснено багатосхиле арку, тому відповідь повинна бути іншою.
Девід Планелла

Відповіді:


36

Такий підхід є дуже складним і навряд чи коли-небудь приведе до того, що всі ваші пакети будуть amd64замість i386версії. Тільки пакети, які насправді отримують оновлення, можливо, будуть змінені в архітектурі, і, ймовірно, тільки якщо жоден інший пакет, який не оновлюється, покладається на те, що вони є i386архітектурою. Оскільки деякі пакети не будуть отримувати якісь - або поновлення на протязі всього циклу підтримки вашого релізу Ubuntu, ви, ймовірно , ніколи не маєте повністю amd64системи , використовуючи таку техніку. Крім того, офіційного забезпечення такого підходу, безумовно, немає.

Вам рекомендується замінити існуючу систему Ubuntu на нову, 64-бітну установку.

Однак якщо ви хочете спробувати цю техніку, вам доведеться завантажувати файли для та та вручну . Ви можете їх знайти на сторінках Ubuntu та на Ubuntu на Launchpad - розгорніть останню версію в розділі "Онерічний Оцелот", який позначений як випуск, безпека та / або оновлення (але ви, ймовірно, не хочете, щоб версія позначена лише запропоновані та / або зворотні сторони, якщо такі є). Потім завантажте файли з позначкою . Зокрема, потрібні вам файли: цей для (і інші, перелічені також, якщо у вас встановлені ці пакети), і це, і це, і це, і це.debdpkgaptdpkgapt.debamd64dpkgі це для apt.

Перш ніж робити що-небудь з цими файлами, слід переконатися, що потрібно створити резервну копію всіх важливих документів у встановленій системі Ubuntu та будь-яких інших важливих файлів (наприклад, музики, електронних книг, відео), тому що досить ймовірно, що спроба цієї техніки призведе до поганої реакції. і залиште вашу систему Ubuntu повністю непридатною.

Ви можете встановити всі ці пакети, помістивши їх у папку, яка не містить нічого іншого (припустимо, папка викликається debsта знаходиться у вашому Downloadsкаталозі), а потім виконайте цю команду:

sudo dpkg -Ri ~/Downloads/debs

Звичайно, щойно ви встановите їх, вони фактично не будуть працювати, оскільки їх виконувані файли 64-бітні, а ваша 32-розрядна система Ubuntu має 32-бітове ядро ​​(яке запускатиме лише 32-бітні виконувані файли). Насправді вони навіть не можуть закінчити встановлення, оскільки у них можуть бути сценарії після встановлення, які викликають 64-бітові виконувані файли, які не можна виконати.

Існують різні способи спроби встановлення 64-розрядного ядра в 32-бітну систему, але всі вони надзвичайно складні, тому замість цього я рекомендую завантажуватись із 64-розрядного живого компакт-диска Oneiric (який сам запускає 64-розрядний ядро), chroot в установлену систему Ubuntu, і використовувати недавно встановлений 64-бітний aptі dpkgвстановити 64-бітове ядро.

Ось конкретні вказівки щодо цього ... але, будь ласка, не сприймайте це так, що я кажу, що це спрацює. Я цього не робив. (Я ввійшов до встановлених систем Ubuntu з живих компакт-дисків і виконував управління пакунками та інші операції, але я не робив спроб крос-архітектури, запропонованих тут.)

  1. У встановленій системі Ubuntu відкрийте вікно терміналу ( Ctrl+ Alt+ T) і запустіть mount | grep ' on / '(вставивши його в термінал і натиснувши клавішу Enter). Ви повинні побачити щось подібне /dev/sda2 on / type ext4 (rw,errors=remount-ro,commit=0). Те, що вас цікавить, - це назва пристрою раніше on(у цьому прикладі - це /dev/sda2). Пам’ятайте про це або записуйте це.

  2. Крок 1 дав вам назву пристрою /розділу. Якщо у вас є окремий /bootрозділ, тоді вам також потрібно знати назву пристрою. Тож у такому випадку біжіть mount | grep ' on /boot '. Ви побачите щось подібне /dev/sda1 on /boot type ext2 (rw). Запам'ятайте або запишіть це також.

  3. Завантажте з живого компакт-диска Oneiric amd64 (тобто 64-розрядного) та виберіть "Спробуйте Ubuntu", а не "Встановити Ubuntu".

  4. Зайдіть у веб-браузер і переконайтесь, що підключення до Інтернету є повністю функціональним. Якщо це не так, налаштуйте його.

  5. Відкрийте вікно терміналу та запустіть sudo mount /dev/sda2 /mnt(замініть /dev/sda2ім'я пристрою, яке ви отримали на кроці 1, якщо воно інше).

  6. Якщо у встановленій системі є окремий /bootрозділ, запустіть sudo mount /dev/sda1 /mnt/boot(замініть /dev/sda1ім'я пристрою, яке ви отримали на кроці 2, якщо воно інше).

  7. Тепер запустіть ці команди, щоб перейти до встановленої системи:

    sudo mount --bind /dev /mnt/dev  
    sudo chroot /mnt  
    mount -t proc none /proc  
    mount -t sysfs none /sys  
    mount -t devpts none /dev/pts  
    
  8. Запустіть, ping -c 4 launchpad.netщоб переконатися, що підключення до Інтернету повноцінно працює зсередини chroot. Ви сподіваєтесь на щось подібне:

    PING launchpad.net (91.189.89.223) 56(84) bytes of data.
    64 bytes from launchpad-net.banana.canonical.com (91.189.89.223): icmp_req=1 ttl=41 time=141 ms
    64 bytes from launchpad-net.banana.canonical.com (91.189.89.223): icmp_req=2 ttl=41 time=143 ms
    64 bytes from launchpad-net.banana.canonical.com (91.189.89.223): icmp_req=3 ttl=41 time=142 ms
    64 bytes from launchpad-net.banana.canonical.com (91.189.89.223): icmp_req=4 ttl=41 time=140 ms
    
    --- launchpad.net ping statistics ---
    4 packets transmitted, 4 received, 0% packet loss, time 3003ms
    
  9. Якщо замість цього ви не змогли передати або отримати пакети, вам доведеться встановити підключення до Інтернету в chroot. Для цього запустіть ці команди (щоб залишити chroot, скопіюйте у chroot відповідні файли конфігурації з живої системи CD та повторно введіть chroot):

    sudo cp /mnt/etc/resolv.conf /mnt/etc/resolv.conf.old  
    sudo cp /mnt/etc/hosts /mnt/etc/hosts.old  
    sudo cp /etc/resolv.conf /mnt/etc/resolv.conf  
    sudo cp /etc/hosts /mnt/etc/hosts
    

    Хоча, як правило, ви повинні зупинити цей процес, якщо є помилка, не переживайте, якщо перша та / або друга з цих чотирьох команд не вдаються, за умови, що конкретний спосіб, коли вона не працює, повідомляє вам, що /mnt/etc/resolv.conf(або /mnt/etc/hosts) не існує .

    Chroot знову і спробуйте ще раз:

    sudo chroot /mnt  
    ping -c 4 launchpad.net  
    
  10. Виконайте ці команди, щоб зробити ваше хроноване середовище повністю готовим до використання:

    export HOME=/root  
    export LC_ALL=C  
    
  11. Якщо ви не встановили .debфайли для 64-розрядних версій dpkgі apt, зробіть це зараз. Якщо ви їх встановили, але були помилки конфігурації, запустіть dpkg --configure -aїх виправити. (Сподіваємось, що це спрацює ... можливо, буде краще почекати спробувати встановити їх до тих пір, поки ви не опинитесь в середовищі живого компакт-диска, на випадок, якщо встановлення 64-розрядного dpkgпід час завантаження в встановлену систему не залишиться dpkgу непридатному стані.)

  12. З 64-бітовими версіями dpkgта aptвстановленими, припускаючи, що вони автоматично встановлюватимуть 64-розрядні пакети, тепер можна видалити всі 32-бітні ядра та встановити 64-бітове ядро. Щоб видалити 32-бітні ядра, запустіть dpkg -l | grep linux-. Тут перелічені встановлені пакети, які починаються з linux-. Ви більш конкретно зацікавлені в пакети , які починаються , як linux-generic, linux-image, linux-serverі / або linux-headers. Видаліть ці файли, apt-get purge ...де ...замінено перелік розділених пробілом пакетів, які ви видаляєте.

  13. Тепер перевстановіть видалені пакети. (Насправді, для пакетів, що містять номери версій у назві пакета, як, наприклад linux-image-3.0.0-13-generic, вам потрібно встановити лише останні перейменовані назви пакунків.) Зробіть це, запустивши apt-get install ...там, де ...замінено список розділених пробілом пакетів, які ви встановлюєте. .

  14. Оновіть конфігурацію завантажувача, відключіть деякі пристрої та залиште chroot:

    update-grub  
    umount /proc || umount -lf /proc  
    umount /sys  
    umount /dev/pts  
    exit  
    sudo umount mnt/dev  
    
  15. Якщо ви бігли, sudo cp /mnt/etc/resolv.conf /mnt/etc/resolv.conf.oldі це не провалилося, то тепер біжіть sudo cp /mnt/etc/resolv.conf.old /mnt/etc/resolv.conf.

  16. Якщо ви бігли, sudo cp /mnt/etc/hosts /mnt/etc/hosts.oldі це не провалилося, то тепер біжіть sudo cp /mnt/etc/hosts.old /mnt/etc/hosts.

  17. Якщо у встановленій системі є окремий /bootрозділ, відключіть це:sudo umount /mnt/boot

  18. Демонтуйте /розділ встановленої системи :sudo umount /mnt

  19. Залиште вікно терміналу (запустіть exit), потім перезавантажте (або вимкніть) живу систему CD та завантажтесь у встановлену систему.

  20. Подивіться, чи система придатна для використання і працює 64-бітове ядро ​​( uname -mслід сказати, що архітектура є x86_64).

Можливо, можуть бути додаткові пакети, які вам потрібно встановити, такі як ia32_libsта / або 64-розрядна версія libc6для цього, щоб це працювало. Для деяких з них, можливо, ви поінформуєте, що вам потрібні під час спроби встановити 64-бітну версію dpkgта / або apt. Для інших вас можуть не повідомити.

(Наведені вище вказівки щодо хротування та роботи в середовищі, що знаходяться в хронізованому середовищі, значною мірою базуються на цій пов'язаній, але різній процедурі, а також на деяких моїх повідомленнях Launchpad Answers , особливо №6 тут і №6 тут . І особлива подяка Cesium за вказівку що 64-розрядні dpkgта aptвиконувані файли не працюватимуть у системі, де працює 32-бітове ядро.)


2
Чи будуть бінарні файли працювати під 32-бітовим ядром, Еліа?
Цезій

@Caesium Добрий дзвінок. Звичайно, ні. Я б відредагував свою публікацію, щоб вказати, як запустити 64-бітове ядро ​​... за винятком того, що я не знаю, як встановити 64-бітний пакет ядра в 32-бітну систему Ubuntu (працює на 64-бітному апаратному забезпеченні, звичайно) , коли aptі dpkgпо - , як і раніше 32-розрядні і буде (приблизно) відмовитися від установки пакета ядра на 64-бітну. (Створення ядра з джерела та використання крос-компіляції спрацювало б, але це дуже складно, і я не хочу його рекомендувати. Я впевнений, що є кращий, простіший спосіб. Якщо ви це знаєте, будь ласка, не соромтеся щоб відредагувати мою чи вашу публікацію чи прокоментувати її.)
Eliah Kagan

@Caesium Насправді, я думаю, я знаю, як встановити 64-бітове ядро. Я скоро відредагую свій пост, щоб відобразити це. Як тільки я це зробити, якщо ви відчуваєте, що моя запропонована методика спрацює, будь ласка, не соромтесь скопіювати та / або перефразовувати її у свою відповідь ... або, як варіант, до тих пір, поки і інформація у вашій відповіді, яка не в моїй, і інформація у моїй відповіді, що не у вашій, збереглися, ви могли б поєднати наші відповіді в одну відповідь. (Це може бути ваша відповідь - це добре зі мною. Ви дописували трохи раніше, ніж я. Потім я видалю свою відповідь.)
Eliah Kagan

@Caesium Правки завершено; Я з нетерпінням чекаю ваших коментарів.
Елія Каган

Вау, приємна робота :) На даний момент ви доклали набагато більше зусиль, ніж я, тому я не мріяв би скопіювати свою відповідь, ваша має залишитися на заслугу. Це не відходить від первісної мети використання технології мультиарха, але мені буде цікаво почути, чи працює вона все-таки :) Здогадайтесь, нам доведеться чекати оригінального плаката :)
Цезій

25

Як було сказано вище, я зробив:

echo foreign-architecture amd64 | sudo tee /etc/dpkg/dpkg.cfg.d/multiarch
sudo apt-get update
sudo apt-get install linux-image:amd64
sudo apt-get install gcc-multilib
sudo update-grub

Це спрацювало. Я можу запустити свою 32-бітну користувальницьку область з 64-бітним ядром, в Ubuntu 12.04.


5
Ця відповідь хитається. Я можу підтвердити, що це все ще працює з соусом. Одна відмінність полягає в тому, що процедура додавання архітектури змінилася: sudo dpkg --add-architecture amd64замість цього використовувати . Він буде кричати на вас, якщо ви зробите це іншим способом. Мені потрібно було це зробити, щоб я міг закріпитися на 64-бітній установці з (раніше) 32-бітової установки, і вона працювала так, як очікувалося, без перешкод.
Вуг

Я спробував це на Монетному дворі, але у мене виникли деякі проблеми, ти щось ще робив? Детальніше: superuser.com/q/927830/150718
dr Hannibal Lecter

Крім зміни Wug, вам також потрібно використовувати linux-image-generic:amd64на Ubuntu 16.04. Це добре спрацювало навіть без двох останніх команд.
qznc

6

Хоча питання схоже на Чи можливо "модернізувати" 32-бітну до 64-бітної установки? (Якщо ви раніше не читали, я закликаю вас спробувати його. Відповідь за умови, що це добре.) Я також рекомендую прочитати наступні посилання:

Для кращої продуктивності мені слід встановити 32-бітну або 64-бітну?

Як я можу переключити 32-бітну установку на 64-бітну?

У чому полягають відмінності між 32-розрядною та 64-бітною версією, і яку я повинен вибрати?

Чи можливо: Так

Легко: НІ!

Якщо ваша проблема пов'язана з пам'яттю, то ви повинні знати, що Ubuntu 32 Bit може прочитати більше 4 Гб оперативної пам’яті (до 64 ГБ). Тож використання останньої версії Ubuntu 32 біт з комп’ютером, який має 32-бітну або 64-бітну архітектуру та введення більшої кількості оперативної пам’яті, не буде проблемою. Він просто прочитає зайву оперативну пам’ять і працюватиме.


5

Ці відповіді дещо застаріли. Перехресне оцінювання тепер задокументовано для Debian на вікі Debian , але все ще не рекомендується.

Встановити ядро ​​з іншої архітектури зараз настільки просто, як описано там, але новий "apt" не розпізнає пакунки з попередньої архітектури, і тому всі його передні частини можуть повідомити про багато зламаних пакетів. Це вимагає зміни всіх залежностей від іншої архітектури, або повернення apt і dpkg до 32-розрядних.

Тож найкращим підходом може бути спочатку збереження результатів dpkg --get-selections, strip: i386 з цього, та завантаження пакета amd64 для кожної залежності в кеш:

apt-get --download-only install perl:amd64 python3:amd64 python3-gi:amd64 xorg:amd64...

У кращому випадку це може бути повільним і трудомістким вирішенням залежностей.


5

Ці інструкції змушують завантажувати вашу систему 64-бітним ядром, але не змінюють більшість програм користувача.

Після оновлення моєї системи 64-бітним процесором я також хотів встановити 64-розрядне ядро ​​на моєму 32-бітному 14.04.2 Ubuntu (кодове ім'я: Trusty). Для цього я ввів наступні команди як користувач root :

dpkg --add-architecture amd64   
apt-get update
apt-get install linux-generic-lts-utopic:amd64

Примітки:

  1. Це може видалити ваше 32-бітове ядро ​​як надійне - за замовчуванням - поставляється з оновленим ядром (ядро з утопіки), див. Примітки до випуску 14.04 . У цьому випадку ваше поточне ядро ​​конфліктує з 64-бітним ядром, яке потрібно встановити, і тому його видаляють. Якщо вам не подобається ця ідея, можливо, ви захочете спробувати старший 64-бітний пакет ядра "linux-generic-lts-trusty: amd64".

  2. Команда "--add-architecure" є важливою. Без цього система пакетів не підтримує пакети різних архітектур, див. Multiarch-HowTo

  3. Щоб побачити, що apt-getбуде робити з вашою системою, запустіть її за допомогою параметрів, -Vsщо дозволяє "режим багатослідового моделювання". Це надрукує всі пакунки, які потрібно встановити та вилучити.

  4. Систематичне завантаження системи за допомогою нового ядра залежить від grubконфігурації. Як користувач root , запустіть, update-grubщоб оновити grub та надрукувати поточну конфігурацію завантаження. Перше зображення у списку буде завантажено за замовчуванням.

  5. Щоб вибрати інше ядро, я видалив рядок GRUB_HIDDEN_TIMEOUT=0з /etc/default/grubі побіг , як кореневої користувач update-grub . Під час завантаження тепер ви можете вибрати інше ядро ​​(у вас є 10 секунд, щоб натиснути будь-яку клавішу, інакше grub продовжить роботу з ядром за замовчуванням).

  6. Відповідь з найбільшою кількістю голосів - з 2011 року і на мою думку безнадійно застаріла. Multiarch дозволяє встановлювати бібліотечні пакети з декількох архітектур на одній машині без особливих чарівностей.


Це приємна проста порада, яка майже працювала для мене 14.10 (утопічна) (проте я це зробив, apt-get install linux-generic:amd64що не повинно бути дуже важливим для експерименту)! Якщо я переходжу через "рятувальний" варіант завантаження, система працює, але X не використовує nouveauдрайвер відео та ін. Якщо я нормально завантажуюся, то в якийсь момент запуск ламається, і система перезавантажується. (Але вперше мені вдалося завантажитися успішно.) Я не впевнений, чи проблема в драйвері відео під час "нормальної" завантаження чи щось інше.
imz - Іван Захарящев

Драйвер відео та X виявились (статистично) не пов'язаними з моїми збоями / перезавантаженнями з ядром amd64. Це поки що загадка - bugs.launchpad.net/ubuntu/+source/upstart/+bug/1495116 .
imz - Іван Захарящев

2

Можливо, коли я зіткнуся з тією ж проблемою, це спрацює, це те, що я планував зробити:

Отримайте 64-розрядну версію ОС, встановіть її в розділ, коли повністю скопіюйте документи та інші речі з 32-розрядної установки, коли все надійно скопійовано, ви можете відформатувати решту диска та використовувати його.


2

Так, зарубіжна архітектурна лінійка, безумовно, життєво важлива для встановлення будь-яких пакетів міжхресної арки. Але після цього зробіть так, як згадували кілька інших користувачів:

sudo apt-get update
sudo apt-get install linux-image:amd64
sudo apt-get install linux-modules:amd64
sudo init 6 #reboot into new kernel
sudo apt-get install apt:amd64
sudo apt-get install ubuntu-desktop:amd64

Це мало би зробити це ...


ти спробував? насправді це не працює, у мене виникають проблеми, коли він починає замінювати dpkg та perl своїми колегами з amd64
Janus Troelsen

2

Мій рецепт для Ubuntu 16.04 Xenial, перевірений на щойно встановленому 32-бітному Ubuntu VM зі стандартною системою та SSH сервером, але без GUI:

sudo -s
dpkg --get-selections > pkg1
dpkg --add-architecture amd64
apt update
apt install linux-image-generic:amd64 thermald 

(інакше він встановив би thermd: amd64 і не зможе перезапустити його під 32-бітним ядром)

reboot

після перезавантаження 64-бітного ядра:

sudo -s
unset LANG
apt install apt:amd64 apt-utils:amd64

введіть "Так, зробіть, як я кажу!" коли його запитають, це буде безпечно

mkdir /tmp/upgrade 
cd /tmp/upgrade
pkgs() { dpkg -l | awk '$4=="'$1'"{print $2}' | awk -F: '{print $1}' | sort -u
}
apt download $(comm -23 <(pkgs i386) <(pkgs amd64))
while ls *amd64*deb
do dpkg -i *amd64*deb
   dpkg -l | awk '$1=="ii" && $4=="amd64" {print $2}' | awk -F: '{print $1}' |
   while read a
   do [ -f ${a}_*amd64*deb ] && rm ${a}_*amd64*deb
   done
done

у циклі вище, ми видаляємо .deb файли, які були успішно встановлені та отримали статус 'ii' у списку dpkg.

нам потрібно повторити dpkg -iпробіжки, оскільки це не вдається з першої спроби

reboot

Тепер із 64-розрядного ядра та простору користувача інші пакети i386 можна видалити:

dpkg --purge $(dpkg -l | awk '$4=="i386"{print $2}')

список, який ви зберегли у pkgs1файлі, який ви можете використовувати для будь-яких подальших потреб.


Це якась магія, але це допомогло мені зробити перехід від 32 до 64 біт через SSH на віддаленому ПК.
користувач271872

1

Гарне питання. У мене було полювання навколо, окрім історії користувача, яку ви цитуєте, я не можу знайти жодних деталей, як це зробити. Уся документація вказує, що це лише для запуску 32-бітних додатків у вже 64-бітній ОС.

Однак якщо ви готові експериментувати, ви можете спробувати наступне (отримане з мого посилання за адресою [1])

 echo foreign-architecture amd64 | sudo tee /etc/dpkg/dpkg.cfg.d/multiarch
 sudo apt-get install linux-image:amd64

Я думаю, вам доведеться починати з ядра amd64, оскільки 32-бітний не зможе запустити жодних 64-бітних бінарних файлів. Однак 64-бітний повинен запускати 32-бітні бінарні файли (якщо ia32-libs встановлений?).

Якщо ви встановите та завантажуєте 64-бітове ядро, ви можете перейти звідти до встановлення apt: amd64, після чого дотримуйтесь історії користувача, як раніше було цитовано, ubuntu-minimal, ubuntu-desktop тощо.

Після apt: amd64 встановлений, я думаю, ви можете видалити лінію іноземної архітектури, оскільки ви по суті переключились на цей момент.

Відмова: У мене немає 32-бітної системи для тестування, тому це все здогадки. Удачі!

[1] https://wiki.ubuntu.com/OneiricOcelot/TechnicalOverview/Beta1#Improved_handling_of_32-bit_compatibility_on_amd64_systems


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.