ในระบบ Debian ของฉันฉันมีของฉันพาร์ติชันบนแยกต่างหากและติดตั้ง/
read-only
เท่านั้น/home/
, /var/
และ/tmp/
มีความสามารถเขียนได้ ฉันได้สร้างPre-Invoke
และPost-Invoke
apt hook
เพื่อให้apt
สามารถติดตั้งระบบใหม่สำหรับการเขียนโดยอัตโนมัติเมื่อมีการติดตั้งหรืออัปเกรดแพคเกจและติดตั้งใหม่อีกครั้งread-only
เมื่อเสร็จสิ้น:
DPkg::Pre-Invoke {"mount -o remount,rw / ;};
DPkg::Post-Invoke {"mount -o remount / ;};
การตั้งค่าทั้งหมดนี้ทำงานได้ดีโดยมีข้อยกเว้นหนึ่งข้อ บางครั้งในระหว่างกระบวนการติดตั้ง / อัปเกรดบริการบางอย่างจำเป็นต้องเริ่มใหม่หรือเปิดไฟล์ใหม่ในช่วงเวลาสั้น ๆ เมื่อฉัน/
ติดตั้งread-write
ไฟล์เหล่านี้จะเปิดขึ้นพร้อมwrite
สิทธิ์ หลังจากการติดตั้ง / อัพเกรดเสร็จสมบูรณ์แล้วฉันPost-Invoke
ผิดพลาดผลตอบแทนเบ็ดเพราะมันไม่สามารถ remount กลับไป/
read-only
มีวิธีแก้ปัญหานี้ไหม? นี่เป็นเรื่องที่น่ารำคาญมากเพราะในสถานการณ์นี้ฉันต้องรีสตาร์ทเซิร์ฟเวอร์ซึ่งไม่สามารถใช้งานได้
แก้ไข
ด้านล่างนี้เป็นบันทึกการอัปเกรดแพ็คเกจล่าสุดของฉันซึ่งส่งผลให้เกิดข้อผิดพลาดที่อธิบายไว้:
root@alpha# apt-get upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be upgraded:
base-files curl libc-bin libc6 libcurl3 libcurl3-gnutls libmysqlclient18 libssl1.0.0 locales multiarch-support mysql-client mysql-client-5.5 mysql-common
nscd openssl tzdata wget whois
18 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
Need to get 18.7 MB of archives.
After this operation, 264 kB of additional disk space will be used.
Do you want to continue [Y/n]?
Fetched 18.7 MB in 0s (33.2 MB/s)
Preconfiguring packages ...
(Reading database ... 20532 files and directories currently installed.)
Preparing to replace base-files 7.1wheezy3 (using .../base-files_7.1wheezy4_amd64.deb) ...
Unpacking replacement base-files ...
Processing triggers for man-db ...
Processing triggers for install-info ...
Setting up base-files (7.1wheezy4) ...
Installing new version of config file /etc/debian_version ...
(Reading database ... 20532 files and directories currently installed.)
Preparing to replace libc-bin 2.13-38 (using .../libc-bin_2.13-38+deb7u1_amd64.deb) ...
Unpacking replacement libc-bin ...
Processing triggers for man-db ...
Setting up libc-bin (2.13-38+deb7u1) ...
(Reading database ... 20532 files and directories currently installed.)
Preparing to replace libc6:amd64 2.13-38 (using .../libc6_2.13-38+deb7u1_amd64.deb) ...
Unpacking replacement libc6:amd64 ...
Setting up libc6:amd64 (2.13-38+deb7u1) ...
(Reading database ... 20532 files and directories currently installed.)
Preparing to replace libssl1.0.0:amd64 1.0.1e-2+deb7u1 (using .../libssl1.0.0_1.0.1e-2+deb7u4_amd64.deb) ...
Unpacking replacement libssl1.0.0:amd64 ...
Preparing to replace curl 7.26.0-1+wheezy7 (using .../curl_7.26.0-1+wheezy8_amd64.deb) ...
Unpacking replacement curl ...
Preparing to replace libcurl3:amd64 7.26.0-1+wheezy7 (using .../libcurl3_7.26.0-1+wheezy8_amd64.deb) ...
Unpacking replacement libcurl3:amd64 ...
Preparing to replace libcurl3-gnutls:amd64 7.26.0-1+wheezy7 (using .../libcurl3-gnutls_7.26.0-1+wheezy8_amd64.deb) ...
Unpacking replacement libcurl3-gnutls:amd64 ...
Preparing to replace mysql-common 5.5.33+dfsg-0+wheezy1 (using .../mysql-common_5.5.35+dfsg-0+wheezy1_all.deb) ...
Unpacking replacement mysql-common ...
Preparing to replace libmysqlclient18:amd64 5.5.33+dfsg-0+wheezy1 (using .../libmysqlclient18_5.5.35+dfsg-0+wheezy1_amd64.deb) ...
Unpacking replacement libmysqlclient18:amd64 ...
Preparing to replace multiarch-support 2.13-38 (using .../multiarch-support_2.13-38+deb7u1_amd64.deb) ...
Unpacking replacement multiarch-support ...
Processing triggers for man-db ...
Setting up multiarch-support (2.13-38+deb7u1) ...
(Reading database ... 20532 files and directories currently installed.)
Preparing to replace tzdata 2013h-0wheezy1 (using .../tzdata_2013i-0wheezy1_all.deb) ...
Unpacking replacement tzdata ...
Setting up tzdata (2013i-0wheezy1) ...
Current default time zone: 'Europe/London'
Local time is now: Sat Feb 15 11:35:41 CET 2014.
Universal Time is now: Sat Feb 15 11:35:41 UTC 2014.
Run 'dpkg-reconfigure tzdata' if you wish to change it.
(Reading database ... 20511 files and directories currently installed.)
Preparing to replace wget 1.13.4-3 (using .../wget_1.13.4-3+deb7u1_amd64.deb) ...
Unpacking replacement wget ...
Preparing to replace locales 2.13-38 (using .../locales_2.13-38+deb7u1_all.deb) ...
Unpacking replacement locales ...
Preparing to replace whois 5.0.23 (using .../whois_5.1.1~deb7u1_amd64.deb) ...
Unpacking replacement whois ...
Preparing to replace mysql-client 5.5.33+dfsg-0+wheezy1 (using .../mysql-client_5.5.35+dfsg-0+wheezy1_all.deb) ...
Unpacking replacement mysql-client ...
Preparing to replace mysql-client-5.5 5.5.33+dfsg-0+wheezy1 (using .../mysql-client-5.5_5.5.35+dfsg-0+wheezy1_amd64.deb) ...
Unpacking replacement mysql-client-5.5 ...
Preparing to replace nscd 2.13-38 (using .../nscd_2.13-38+deb7u1_amd64.deb) ...
[ ok ] Stopping Name Service Cache Daemon: nscd.
Unpacking replacement nscd ...
Preparing to replace openssl 1.0.1e-2+deb7u1 (using .../openssl_1.0.1e-2+deb7u4_amd64.deb) ...
Unpacking replacement openssl ...
Processing triggers for install-info ...
Processing triggers for man-db ...
Setting up libssl1.0.0:amd64 (1.0.1e-2+deb7u4) ...
Setting up libcurl3:amd64 (7.26.0-1+wheezy8) ...
Setting up curl (7.26.0-1+wheezy8) ...
Setting up libcurl3-gnutls:amd64 (7.26.0-1+wheezy8) ...
Setting up mysql-common (5.5.35+dfsg-0+wheezy1) ...
Setting up libmysqlclient18:amd64 (5.5.35+dfsg-0+wheezy1) ...
Setting up wget (1.13.4-3+deb7u1) ...
Setting up locales (2.13-38+deb7u1) ...
Generating locales (this might take a while)...
en_DK.UTF-8... done
en_US.UTF-8... done
Generation complete.
Setting up whois (5.1.1~deb7u1) ...
Setting up mysql-client-5.5 (5.5.35+dfsg-0+wheezy1) ...
Setting up mysql-client (5.5.35+dfsg-0+wheezy1) ...
Setting up nscd (2.13-38+deb7u1) ...
[ ok ] Starting Name Service Cache Daemon: nscd.
Setting up openssl (1.0.1e-2+deb7u4) ...
mount: / is busy
บรรทัดสุดท้าย ( mount: / is busy
) เป็นข้อผิดพลาดที่ส่งกลับโดยฉลาดเมื่อพยายามที่จะ remount กลับไป/
read-only
UPDATE:
คำสั่งที่แนะนำโดยGraeme
ไม่แสดงไฟล์ใด ๆ :
# lsof / | awk 'NR==1 || $4~/[0-9][uw]/'
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rw
ในครั้งแรก แต่วิธีแก้ปัญหาใด ๆ ที่จะทำให้ฉันสามารถro
นับใหม่โดยไม่ต้องรีสตาร์ทก็ดีเช่นกัน
read-write
หรือไม่ต้องรีบูตเซิร์ฟเวอร์ในขณะที่สามารถติดตั้งro
ใหม่หรือค้นหาและเปลี่ยนแปลงแพ็คเกจการบล็อกได้ หรืออาจเป็นที่ยอมรับว่าเป็นทางออกหรือไม่?