Kembalikan direktori root yang dipindahkan secara rekursif

14

Saya memiliki Desktop Ubuntu yang digunakan sebagai Server. Pagi ini saya secara tidak sengaja memindahkan semua root saya ke../

 root@server:/tmp/UPS/up/upsilon# mv /* ../
 mv: impossibile spostare "/dev" in "../dev": Dispositivo o risorsa occupata
 mv: impossibile spostare "/proc" in "../proc": Dispositivo o risorsa occupata
 mv: impossibile spostare "/run" in "../run": Dispositivo o risorsa occupata
 mv: impossibile spostare "/sys" in "../sys": Dispositivo o risorsa occupata
 mv: impossibile spostare "/tmp" in una sottodirectory di sé stessa, "../tmp"
 root@server:/tmp/UPS/up/upsilon# ls
 -bash: /bin/ls: No such file or directory

Saya terhubung jarak jauh di ssh. Sekarang, saya tidak dapat mengakses lagi. Saya juga tidak bisa melihat Webmin.

Jadi, sekarang saya tidak bisa memulai ulang sistem dengan benar? Dan saya harus secara fisik mengakses konsol sistem dan mengetik perintah ini:

../bin/mv ../{bin,boot,etc,home,media,mnt,opt,root,sbin,selinux,usr,var,vmlinuz*}

Baik?

Di mana direktori root saya pergi dan bagaimana saya bisa mendapatkannya kembali? Akankah perintah di atas berhasil?

MaxDL
sumber
10
Wow! Itu adalah kesalahan yang mengesankan! :(
Sparhawk
3
Apakah saya mengerti benar bahwa direktori kerja pada saat itu /? Jika demikian, ketika saya mencoba mv tempdir/ ../, saya dapat mv: ‘tempdir/’ and ‘../tempdir’ are the same file, tanpa ada yang bergerak.
Sparhawk
Lain kali, jangan login sebagai root. Dan jika Anda ingin mvmenambahkan -isaklar.
Braiam
1
Saya tidak setuju. Terkadang Anda memang ingin login sebagai root daripada belajar menempatkan 'sudo' tanpa berpikir di depan setiap perintah. Namun berhati-hatilah saat login sebagai root. Apalagi dengan menghapus dan memindahkan perintah. --- Tetap saja, kesalahan bisa terjadi dan kita belajar dari itu. @ MaxDL: Bisakah Anda mengembalikan partisi / dari cadangan? Apakah Anda memiliki cadangan? Bisakah Anda menggunakan Dell DRAC, HP ILO atau alat akses jarak jauh lainnya untuk mengakses konsol server tanpa mem-boot OS?
Hennes

Jawaban:

12

Anda belum memindahkan direktori root (Anda tidak bisa), Anda baru saja memindahkan hampir semua yang ada di dalamnya ke direktori induk dari jalur apa pun yang Anda jalani.

Untuk menyulitkan hal-hal, Anda juga telah pindah mvsehingga tidak akan berfungsi seperti yang diharapkan. Berikut ini akan berfungsi (selama Anda belum mem-boot ulang sejak menanyakan hal ini!) Jika Anda masih berada di direktori yang sama dengan saat Anda mematikan mv terakhir.

../bin/mv ../{bin,boot,etc,home,media,mnt,opt,root,sbin,selinux,usr,var,vmlinuz*} /

Jika Anda tidak memilikinya, cukup singkirkan mereka dari perintah.

Dan jika Anda tidak memiliki akses (Anda tidak akan dapat melakukan login baru saat keadaan ini) Anda harus me-mount sistem file secara eksternal (melalui sesuatu seperti LiveCD dan me-mount sistem file dan kemudian memindahkan file ke tempat yang tepat. Jawaban Braiam akan membantu bagian ini.

Oli
sumber
Yang membingungkan saya adalah baris root@server:/# ls, yang menyarankan kepada saya bahwa direktori saat ini /. (Oleh karena itu komentar kedua saya di atas.)
Sparhawk
Maaf, itu adalah perintah lengkap: root @ server: / tmp / UPS / up / upsilon # mv / * ../ Saya terhubung jauh di ssh. Sekarang, saya tidak dapat mengakses lagi.
MaxDL
Maka perintah untuk memperbaikinya adalah/tmp/UPS/up/bin/mv /tmp/UPS/up/{bin,boot,etc,home,media,mnt,opt,root,sbin,selinux,usr,var,vmlinuz*} /
Sparhawk
10

Jika Anda sudah reboot atau logout, Anda bisa boot di liveCD / USB untuk memperbaiki sistem Anda. Saya akan menghilangkan bagian di mana Anda tahu cara membuat sistem Live dan boot dengan Ubuntu (cd alternatif juga berfungsi, cukup masukkan ke shell root):

Pertama, Anda harus memasang sistem Anda ke suatu tempat, jadi:

mkdir /mnt/system
mount /dev/sda1 /mnt/system

Saya berasumsi /dev/sda1adalah akar Anda. Jika Anda telah berpisah /binatau /usrAnda harus memasangnya juga:

mount /dev/sda2 /mnt/system/usr

Sekarang, Anda harus tiba di direktori Anda sebelum bencana:

cd /mnt/system/tmp/UPS/up/upsilon

Sekarang dengan perintah yang diberikan Oli, yang akan saya salin dengan blatancy:

mv ../{bin,boot,etc,home,media,mnt,opt,root,sbin,selinux,usr,var,vmlinuz*} /mnt/system/

Sekarang verifikasi semuanya dalam urutan:

# ls /mnt/system/
bin boot etc home media mnt opt root sbin selinux usr var etc...

Nyalakan ulang sistem Anda dan berhati-hatilah di masa depan.

Braiam
sumber
1

Saya punya masalah ini, saya menemukan bahwa saya perlu memanggil perintah mv seperti ini:

/tmp/UPS/up/lib/ld-linux-x86-64.so.2 --library-path /tmp/UPS/up/lib/ /tmp/UPS/up/test/bin/mv /tmp/UPS/up/{bin,boot,etc,home,media,mnt,opt,root,sbin,selinux,usr,var} /

Semoga ini bisa membantu orang lain.

Johny
sumber