mv: không thể di chuyển nhà của gia đình đến thành nhà cũ của bạn: Thiết bị hoặc tài nguyên bận


10

Tôi muốn thay thế /homebằng một liên kết tượng trưng đến các thư mục nhà gắn trên nfs của tôi.

Chỉ có root được đăng nhập, / home không phải là một hệ thống tập tin riêng biệt, lsof cho thấy không có khóa, selinux được cho phép. Tôi đang thiếu gì?

Tôi đang đăng nhập trực tiếp với quyền root thông qua ssh:

[root@usil01-sql01 /]# uname -a
Linux usil01-sql01 3.10.0-514.el7.x86_64 #1 SMP Tue Nov 22 16:42:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

[root@usil01-sql01 /]# w
 15:30:33 up  1:41,  1 user,  load average: 0.00, 0.02, 0.22
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/2    10.50.11.114     15:13    1.00s  0.19s  0.01s w

[root@usil01-sql01 /]# lsof | grep /home

[root@usil01-sql01 /]# lsof +D /home

[root@usil01-sql01 /]# df -h /home
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2        63G  4.1G   56G   7% /

[root@usil01-sql01 /]# mount | grep -w /
/dev/sda2 on / type ext4 (rw,relatime,seclabel,data=ordered)

[root@usil01-sql01 /]# ls -lFd /home
drwxr-xr-x. 3 root root 4096 Mar  7 13:36 /home/

[root@usil01-sql01 /]# getenforce
Permissive

[root@usil01-sql01 /]# mv /home /home-old
mv: cannot move "/home" to "/home-old": Device or resource busy

Tôi có thể kiểm tra cái gì khác?

Thêm thông tin hệ thống:

[root@usil01-sql01 /]# lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 836.6G  0 disk 
|-sda1   8:1    0 768.6G  0 part /storage
|-sda2   8:2    0    64G  0 part /
`-sda3   8:3    0     4G  0 part [SWAP]
sr0     11:0    1  1024M  0 rom  

[root@usil01-sql01 /]# blkid
/dev/sda2: UUID="5ba6a429-4c65-4023-82b4-3673bfcf6a88" TYPE="ext4" 
/dev/sda3: UUID="b5eb680f-8789-43b2-9f7e-c52570b0eb73" TYPE="swap" 
/dev/sda1: UUID="cb22d57d-4a5b-4963-a990-890abe0c56dc" TYPE="ext4" 

Hãy thử tùy chọn umount lười biếng như trongumount -f -l /home
Valentin Bajrami

Cố gắng tìm kiếm một quy trình đáng ngờ tiêu tốn nhiều tài nguyên trong khi bạn không biết tophoặc có ps. Họ cố gắng xem những gì nó đang làm ngay bây giờ bằng cách sử dụng strace. Tình hình đó thật kỳ lạ. CẬP NHẬT: cũng tăng gấp đôi kiểm tra lsofđầu ra với fusermột chỉ trong trường hợp.
ddnomad

1
@ val0x00ff như bạn có thể thấy trong đầu ra ở trên, / home không phải là điểm gắn kết.
TheAmigo

1
@ddnomad fuser / home cũng không có đầu ra. Đó là một hệ thống được cài đặt mới, không hoạt động, không có quá trình bận rộn.
TheAmigo

@TheAmigo tôi thấy. Tôi đoán bạn đã cố gắng khởi động lại máy chủ. Bạn cũng có thể thử khởi động vào chế độ an toàn từ menu GRUB và thử ở đó.
ddnomad

Câu trả lời:


9

mv: không thể di chuyển "/ home" sang "/ home-old": Thiết bị hoặc tài nguyên bận

"Sử dụng" [*] duy nhất tôi có thể nghĩ ra, trong đó giữ tên của một tập tin thay đổi, là một điểm gắn kết.

Tôi có thể kiểm tra cái gì khác?

Tôi không chắc chắn, nhưng có lẽ điều này có thể xảy ra nếu mount vẫn tồn tại trong một không gian tên mount khác. Bởi vì nó không được truyền bá từ không gian tên gốc, vì một số lý do? Hoặc nhìn vào kết quả trên hệ thống của tôi, có thể các dịch vụ systemd với ProtectHome?

$ grep -h home /proc/*/task/*/mountinfo | sort -u
121 89 0:22 /systemd/inaccessible/dir /home ro,nosuid,nodev shared:142 master:24 - tmpfs tmpfs rw,seclabel,mode=755
275 243 253:2 / /home ro,relatime shared:218 master:33 - ext4 /dev/mapper/alan_dell_2016-home rw,seclabel,data=ordered
321 288 253:2 / /home rw,relatime shared:262 master:33 - ext4 /dev/mapper/alan_dell_2016-home rw,seclabel,data=ordered
84 64 253:2 / /home rw,relatime shared:33 - ext4 /dev/mapper/alan_dell_2016-home rw,seclabel,data=ordered
85 46 253:2 / /home rw,relatime master:33 - ext4 /dev/mapper/alan_dell_2016-home rw,seclabel,data=ordered

Lưu ý vấn đề này - không thể đổi tên / nhà mặc dù nó không hiển thị dưới dạng điểm gắn kết (trong không gian tên hiện tại) - nên được sửa trong phiên bản kernel Linux 3.18+.

https://git.kernel.org/pub/scm/linux/kernel/git/urdy/linux-urdy.git/commit/?h=linux-3.18.y&id=8ed936b5671bfb33d89bc60bdcc7cf0470ba52


Làm thế nào để tìm ra không gian tên của một quá trình cụ thể?

lsnscó thể hữu ích nếu bạn có thể cài đặt nó. Nhiều lệnh có thể hơn:

Liệt kê các không gian tên mount:

# readlink /proc/*/task/*/ns/mnt | sort -u

Xác định không gian tên gốc gắn kết:

# readlink /proc/1/ns/mnt

Tìm các quy trình với một không gian tên mount đã cho

# readlink /proc/*/task/*/ns/mnt | grep 4026531840

Kiểm tra không gian tên của một quy trình nhất định:

# cat /proc/1/task/1/mountinfo

[*] EBUSY Việc đổi tên không thành công vì oldpath hoặc newpath là thư mục được sử dụng bởi một số quy trình (có thể là thư mục làm việc hiện tại hoặc thư mục gốc hoặc do nó được mở để đọc) hoặc được sử dụng bởi hệ thống (cho ví dụ như điểm gắn kết) , trong khi hệ thống coi đây là lỗi. (Lưu ý rằng không có yêu cầu phải trả lại EBUSY trong những trường hợp như vậy, không có gì sai khi thực hiện đổi tên dù sao nhưng nó được phép trả lại EBUSY nếu hệ thống không thể xử lý các tình huống như vậy.)


/ home chưa bao giờ là một mount trong bất kỳ không gian tên nào.
TheAmigo

Điều đó có nghĩa là bạn đã sử dụng các lệnh dọc theo các dòng tôi đề xuất? Bởi vì "không bao giờ" là một khẳng định rất mạnh mẽ, các mệnh lệnh của tôi sẽ không chứng minh điều đó. Tôi đã thêm một lệnh khi bắt đầu sẽ đơn giản hơn (và hy vọng là có chức năng :), và suy đoán thứ hai về lý do tại sao điều này có thể xảy ra dựa trên kết quả trên hệ thống của tôi.
nguồn

Tôi đã tìm thấy một máy "bị hỏng" khác và lệnh grep của bạn thực sự chỉ tay vào NetworkManager. Vì vậy, "dừng NM, đổi tên, khởi động lại NM" của tôi hoạt động, nhưng grep của bạn về mountinfo là thứ tìm ra thủ phạm.
TheAmigo

(vì /lib/systemd/system/NetworkManager.service sử dụng ProtectHome, ít nhất là trên các hệ thống chúng tôi đang xem xét)
sourcejedi

6

Đó là Trình quản lý mạng.

Chạy systemctl stop mysqld httpd postfix ipmievd tuned atd rsyslog smartd crond irqbalance gssproxy polkit chronydkhông giúp được gì, nhưng làm cho bảng quy trình rất nhỏ.

Sau đó systemctl stop NetworkManager, tôi đã có thể đổi tên / nhà.


Tôi chỉ cần thực hiện "dừng dịch vụ NetworkManager" và sau đó có thể di chuyển / về nhà sau đó thực hiện khởi động lại để đảm bảo tất cả đều ổn.
sdjuan

Cảm ơn rât nhiều. Điều này hoàn toàn không rõ ràng và tôi đã phải đọc hàng tá trang nói về / nhà như một điểm gắn kết, điều này rõ ràng không có trong câu hỏi của OP. Tôi thấy việc dừng NetworkManager cũng giúp ích trong trường hợp của tôi, chạy Redhat 7.6.
labradort

0

Bạn có thể khởi động trên một người dùng và thực hiện bất kỳ thay đổi nào trên thư mục chính.

  1. Khởi động lại hệ thống của tôi và lựa chọn grubing chỉnh sửa dòng bằng cách nhấn e
  2. Trong linux16dòng loại bỏ rhgb& quitetùy chọn và đặt vào vị trí của họ init=/bin/bash.
  3. Việc nhấn ctrl+xđể bắt đầu. Điều này sẽ khuyến khích bạn trên bash console.
  4. Kết nối /với các tùy chọn đọc / ghi bằng cách phát hànhmount -o remount,rw /
  5. Sau đó, bạn có thể chỉnh sửa /homethư mục của bạn đổi tên nó, vv
  6. Sau khi hoàn thành công việc, hãy dán lại selinux bằng cách phát hành touch /.autorelabel
  7. Cuối cùng thực hiện exec /sbin/initđể bắt đầu khởi động như bình thường.

@sourcejedi: cảm ơn bạn đã trả lời.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.