ฉันมีระบบ 32 บิตซึ่งทำงานบนโปรเซสเซอร์ 64 บิต ฉันจะแปลงให้เป็นแบบ 64 บิตโดยไม่ต้องติดตั้งใหม่ได้อย่างไร ผมเคยเห็นที่ไหนสักแห่งว่ามันเป็นไปได้เป็นผลมาจากกรอบ Multiarch ใหม่
ฉันมีระบบ 32 บิตซึ่งทำงานบนโปรเซสเซอร์ 64 บิต ฉันจะแปลงให้เป็นแบบ 64 บิตโดยไม่ต้องติดตั้งใหม่ได้อย่างไร ผมเคยเห็นที่ไหนสักแห่งว่ามันเป็นไปได้เป็นผลมาจากกรอบ Multiarch ใหม่
คำตอบ:
TL: DR:ทำได้ แต่มีความซับซ้อน ฉันได้อธิบายทางเลือกไว้ที่ด้านล่าง
ตอนนี้คำอธิบายที่ยาวและเอามันไปด้วยเม็ดเกลือเพราะฉันอาจไม่ได้ใช้เส้นทางที่ดีที่สุด:
เป็นไปได้และนี่คือสิ่งที่ฉันทำในช่วงสองคืนที่ผ่านมา: มีรายการ wiki ที่อธิบายถึงวิธีการโรงเรียนเก่าโดยไม่สนับสนุนหลาย มันมีประโยชน์สำหรับการแก้ไขหีบห่อที่ชำรุด
หากต้องการโอนย้ายระบบฐานของคุณให้ทำสิ่งนี้ :
$ dpkg --print-architecture
i386
# dpkg --add-architecture amd64
$ dpkg --print-foreign-architectures
amd64
# apt-get update
# apt-get download gcc-4.6-base:amd64 libgcc1:amd64 libc6:amd64 \
libselinux1:amd64 zlib1g:amd64 libbz2-1.0:amd64 dpkg:amd64
# dpkg -i gcc-4.6-base*.deb libgcc*.deb libc*.deb libselinux*.deb \
libbz2*.deb zlib*.deb dpkg*.deb
$ dpkg --print-architecture
amd64
$ dpkg --print-foreign-architectures
i386
แพคเกจบางส่วนของคุณเป็น amd64 แต่ส่วนใหญ่จะยังคงอยู่ i386 apt-get upgrade
จะดูแลแพ็กเกจบางอย่างapt-get -f install
จะซ่อมข้อผิดพลาดบางส่วน แต่แพคเกจส่วนใหญ่จะยังคงอยู่ i386 หากคุณต้องการรับมือกับสิ่งนี้ให้ข้ามส่วนที่ยุ่งยาก;)
การใช้dpkg --get-selections | grep :i386
จะส่งคืนแพ็คเกจทั้งหมดของคุณซึ่งคุณจะต้องโยกย้าย
แนวคิดต่อไปของฉันคือการทำ:
# apt-get install `dpkg --get-selections \
| grep i386 \
| awk {'gsub(/:i386/, ":amd64"); print $1'}`
แต่มันกลับกลายเป็นความคิดที่ไม่ดี: บางแพ็คเกจไม่มีใน amd64 (เช่น libc6-i686), apt-get จะสับสนและแพคเกจจำนวนมากจะถูกติดตั้งในทั้งสองเวอร์ชัน ต้องทำงานด้วยมืออย่างถนัดในเรื่องความถนัด
ความยากลำบากมากขึ้น:แพคเกจที่จำเป็นบางอย่างสามารถเปลี่ยนได้ดังนั้นคุณจะต้องติดตั้งไบนารีไว้สำหรับการติดตั้งเสมอ แต่แพคเกจบางอย่างจะต้องถูกลบออกและติดตั้งอีกครั้งเช่นฉันมีปัญหากับ tar ฉันได้แพคเกจบนระบบอื่นแล้วทำการแยกไฟล์แพคเกจผ่านar p package.deb data.tar.gz | tar zx
แล้วscp
เอ็ดไฟล์ที่ถูกแตกไฟล์ผ่านscp -r ./* root@other_computer:/
ดังนั้นไฟล์ไบนารี่จึงสามารถใช้งานได้อีกครั้ง ล้างและทำซ้ำและscp
ไฟล์ ed จะถูกเขียนทับ
ฉันจะทำอะไรแทน
ฉันได้ทำสิ่งต่อไปนี้ทุกครั้งที่ฉันเปลี่ยนระบบ:
Back up /home
, /etc
(และอาจจะ/var
, /usr/local
บางไฟล์อื่น ๆ ที่คุณมีการเปลี่ยนแปลง/root
, ... , YMMV)
รับรายการแพ็กเกจที่ติดตั้งด้วยdpkg --get-selections > packagelist
และคัดลอกไฟล์ผลลัพธ์packagelist
เช่นกัน
จากนั้นทำการติดตั้ง Debian ใหม่ทั้งหมดสร้างผู้ใช้ทั้งหมดอีกครั้งอาจเป็นบทบาทเป็นต้น
ติดตั้งแพ็กเกจทั้งหมดdpkg --set-selections < packagelist; apt-get -f install
อีกครั้งด้วย
คัดลอกไดเรกทอรีไฟล์และคุณทำเสร็จแล้วส่วนใหญ่
ข้อเสียอย่างหนึ่งของวิธีการดังกล่าว: แพ็คเกจทั้งหมดของคุณรวมถึงไลบรารีจะถูกทำเครื่องหมายว่าติดตั้งด้วยตนเองดังนั้นพวกเขาจะไม่ถูกถอนการติดตั้งเมื่อไม่มีแพ็คเกจใดขึ้นอยู่กับพวกเขาอีกต่อไป
apt-mark showauto
เพื่อส่งออกรายการที่ติดตั้งอัตโนมัติและapt-mark auto
ทำเครื่องหมายในการติดตั้งใหม่
x86_64
และไม่สนใจว่าแพ็คเกจระบบของฉันไม่ได้ใช้โปรเซสเซอร์ 64 บิตอย่างเหมาะสมที่สุด ? ฉันยังใช้ระบบปฏิบัติการ 32 บิต ฉันคิดว่าตัวประมวลผลของฉันเป็น 32- บิตเมื่อฉันทำการติดตั้งครั้งแรก: (
คำตอบอื่น ๆ ที่นี่แสดงให้เห็นว่าในขณะนี้เป็นไปได้ในทางทฤษฎีมันมีความซับซ้อนมากและอาจไม่คุ้มค่าความพยายาม อย่างไรก็ตามคุณสามารถทำการติดตั้งใหม่ทั้งหมดและทำให้กระบวนการไม่เจ็บปวดหากคุณ$HOME
ทำแบบเดียวกัน
กระบวนการทั่วไปจะเป็น
ทำการสำรองข้อมูลรายการแพ็คเกจที่ติดตั้งไว้และรายการแพ็คเกจที่ติดตั้งโดยอัตโนมัติ
dpkg --get-selections '*' > package.list
apt-mark showauto >auto.list
โปรดทราบว่าคุณอาจต้องการลบสถาปัตยกรรมออกจากชื่อแพคเกจใด ๆ ที่คุณติดตั้งโดยใช้มัลติชาร์ด :
dpkg --get-selections '*' | sed -e 's/:\(i386\|amd64\)//' > package.list
หากคุณ/home
เป็นพาร์ติชันแยกต่างหากให้ตรวจสอบให้แน่ใจว่าไม่ได้ฟอร์แมตระหว่างการติดตั้ง หากไม่ได้อยู่ในพาร์ติชันแยกต่างหากให้ทำการสำรองข้อมูลที่คุณสามารถกู้คืนได้ในภายหลัง:
tar cvzf home_backup.tgz $HOME/
เมื่อคุณติดตั้งระบบใหม่ของคุณแล้วให้ติดตั้งแพ็คเกจที่ขาดหายไป
sudo dpkg --set-selections < package.list
sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-mark auto $(cat auto.list)
กู้คืน $ HOME ของคุณ คัดลอกไฟล์ tgz ไปและแตกในไดเร็กทอรี $ HOME ของคุณ:
tar xvzf home_backup.tgz
คุณอาจต้องการดูเครื่องมือที่ Mint นำเสนอเพื่อให้ง่ายขึ้น พวกเขาควรติดตั้งบน Ubuntu ได้เช่นกัน
เป็นไปได้ในทางทฤษฎี แต่มีแนวโน้มว่าจะทรยศ เดเบียนมัลติฮาร์ทที่ปัจจุบันรองรับ multiarch libs แต่ไม่ใช่ไบนารี ดังนั้นมีที่
ระบบเข้าใจสถาปัตยกรรมของตัวเองเป็นหลักdpkg-architecture
(ซึ่งจริงๆแล้วเป็นสคริปต์ Perl แต่จะแยกข้อมูล arch และแสดง) ซึ่งอ้างว่าสามารถตั้งค่าสถาปัตยกรรมได้
กระบวนการคร่าวๆคือ:
libgcc1
)dpkg-architecture -aamd64
เพื่อเปลี่ยนส่วนโค้งของคุณ (หมายเหตุมันอาจบ่นเกี่ยวกับ GCC)dpkg
และการขึ้นต่อกันapt-get
และเคอร์เนล (หมายเหตุมันอาจจะบ่นมาก)apt-get
ขั้นตอนเหล่านี้ขึ้นอยู่กับสิ่งที่ฉันรู้เกี่ยวกับการออกแบบ Debian ที่ใช้มันเกือบเฉพาะในหมู่ distros Linux ในช่วง 12 ปีที่ผ่านมา (รวมถึงการใช้งานมาdebtakeover
ก่อน) และวิธีการที่ฉันใช้ ดังนั้นพิจารณานี้ที่มีความเสี่ยงของคุณเอง ระบบของคุณอาจใช้ไม่ได้ตลอดเวลาหลังจากความพยายามที่ขั้นตอนที่ 4 สำรองสำหรับขั้นตอนที่ 4 และ 5 อาจdebbootstrap
จะเป็น
สิ่งสำคัญที่สุดคือฉันขอแนะนำให้ลองใช้ VM ก่อนทำสิ่งใดก็ตามที่คุณใส่ใจ
ขอให้โชคดีและพฤษภาคมกองทัพจะอยู่กับคุณ
ไม่ใช่คำตอบสำหรับคำถาม แต่อาจเป็นการยากที่จะอัพเกรดแพ็คเกจทั้งหมดจาก x86 เป็น amd64 แต่อย่างน้อยคุณสามารถติดตั้งแพคเกจเคอร์เนล amd64 ได้อย่างน้อยซึ่งจะทำให้คุณสามารถรันแอปพลิเคชัน 64 บิตและเครื่องเสมือนและคอนเทนเนอร์เสมือนได้ ซึ่งอาจเพียงพอสำหรับสิ่งที่คุณต้องการ)
เพียงแค่ติดตั้งแพคเกจ amd64 dpkg -i --force-architecture
ลินุกซ์ภาพด้วย
--force-architecture
ไม่จำเป็นและเคอร์เนล amd64 สามารถติดตั้งผ่าน apt บน i386
มีคู่มืออยู่สองสามฉบับ แต่แทบจะไม่แสดงสิ่งที่คาดหวัง ฉันกำลังเขียนสิ่งนี้บนแล็ปท็อป Debian Wheezy ที่ฉันเพิ่งอัพเกรดจาก 32 บิตเป็น 64 และมันใช้งานได้จริง
ฉันทำตามคำแนะนำเหล่านี้และพวกเขาแม่นยำในสิ่งที่คุณจะเผชิญจริง:
http://blog.zugschlus.de/archives/972-How-to-amd64-an-i386-Debian-installation-with-multiarch.html
คำแนะนำคือเพื่อให้ระบบขับเคลื่อนผ่านกระบวนการทั้งหมดอย่ารีบูตจนกว่าคุณจะแน่ใจว่าคุณได้ย้ายข้อมูลทุกอย่างแล้วและทุกอย่างที่ถูกลบถูกติดตั้งอีกครั้ง (โดยเฉพาะแพ็คเกจที่จำเป็น) หรือคุณจะไม่ทำให้ระบบทำงานอีกครั้ง
ต่อไปนี้ความคิดที่ใช้ awkฉันสิ้นสุดที่ใช้:
dpkg --get-selections \ # get the list
| grep -v deinstall \ # throw away deselected packages
| grep ':i386' \ # get the i386 arch packages
| sed 's/install//g' \ # drop 'install' to get list
| sed 's/:i386/:amd64/g' \ # replace i386 with amd64
| while read package; do \ # iterate over the result
apt-get -yf install $package; \ # install each one and fix dependencies
done
ฉันต้องวิ่งสองสามครั้ง dpkg --get-selections
เป็นรายการที่เรียงตามตัวอักษรดังนั้นแพ็คเกจที่อยู่ด้านบนที่ต้องใช้แพ็คเกจที่ด้านล่างจะถูกส่งผ่าน หากคุณต้องการดูจำนวนการติดตั้งให้ทำdpkg --get-selections | grep amd64 | wc -l
ภายในwhile
ลูป
ฉันมีประสบการณ์เพียงเล็กน้อยกับเรื่องนี้ แต่ฉันเชื่อว่าคุณถูกต้องเมื่อคุณพูดว่าการแปลงจาก 32 เป็น 64 ควรมีความสามารถแบบ multi-arch ฉันจะต้องระมัดระวังแม้ว่าจะรองรับระบบใหม่นี้ได้ดีเพียงใด
นี่คือหนึ่งในเอกสารที่ฉันอ่านที่กล่าวถึงเรื่องนี้อาจจะช่วยให้คุณ: https://wiki.ubuntu.com/MultiarchSpec
สังเกตเห็นเรื่องราวของผู้ใช้ที่สาม นี่คือลิงค์อื่นรอบ ๆ หัวข้อเดียวกัน: https://help.ubuntu.com/community/MultiArch
แม้ว่ามันอาจจะแตกต่างจาก Debian และ Ubunutu แต่ก็เป็นคุณสมบัติหลัก ซึ่งฉันคิดว่า Ubuntu และ Debian จะทำงานอย่างใกล้ชิดเพื่อให้โครงสร้างนี้ทำงานบนพื้นดินก่อนที่ Ubuntu จะดึงออกมาและทำสิ่งที่ตนเองชอบ
โชคดี!