2013-08-24 74 views
12

Boy, đây là như vậy. a. không đáng kể. câu hỏi, nhưng chưa ai có thể trả lời đúng.Làm thế nào để bạn trao đổi/dev/sda với/dev/sdb?

Làm thế nào để bạn trao đổi/dev/sda với/dev/sdb?

Ai đó có thể đề xuất sử dụng nhãn vĩnh viễn (ví dụ:/dev/disk/by- *), nhưng bất chấp ý định tốt nhất, điều này không KHÔNG trả lời câu hỏi. Có, labellings vĩnh viễn hoạt động ở nơi bạn có thể sử dụng chúng, nhưng nếu một chương trình được hardcoded để sử dụng ví dụ./dev/sda, câu hỏi này vẫn tồn tại.

Để minh họa cho vấn đề thêm từ những gì tôi tìm thấy trên internet: http://ubuntuforums.org/showthread.php?t=1569238&page=2 (Nhắc tôi 'Schadenfreude')

chap này dường như đã tìm thấy các giải pháp, chỉ cần không chia sẻ nó (boo!) : http://ubuntuforums.org/showthread.php?t=944515

Và tbh, tôi có nguy cơ tương tự tiềm ẩn. Tôi sử dụng CloneZilla, và nếu một chương trình hỏi: Would you like to backup /dev/sda to /dev/sdb or /dev/sdb to /dev/sda ?, đoán làm thế nào thần kinh tôi nhận biết rằng linux dường như ngẫu nhiên gán các đơn đặt hàng đĩa. Tôi chưa ghi đè dữ liệu của mình bằng bản sao lưu của riêng mình, nhưng điều này chỉ đang chờ xảy ra.

Điều gì trong Linux gán/dev/sd * vào đĩa và bạn ảnh hưởng như thế nào đến quá trình này? Điều này có liên quan đến udev (/ etc/udev /, udevadm) không? Hệ điều hành của tôi là CentOS, nhưng tôi cần biết điều này cũng cho Ubuntu và CloneZilla (http://clonezilla.org), và vấn đề này xảy ra trên tất cả các hệ thống, vì vậy tôi đoán rằng vấn đề này không liên quan đến phân phối, mà là , hoặc một cái gì đó rất gần với hạt nhân. Hãy giúp tôi!

------------------ EDIT: 25 August 2013 Sau khi thông báo cho liên kết mà ypnos đưa ra, tôi đã đọc tất cả, thử một lệnh và hạt nhân chỉ 'vommitted' udev quy tắc trên tất cả các màn hình của tôi. Sau đó được nhắc nhập mật khẩu gốc để cho phép bảo trì hoặc thoát để khởi động lại. Đây là bằng chứng cho thấy công cụ này thực sự không dành cho người mới làm quen.

Tôi cũng tìm kiếm thêm một chút. Tôi không hiểu làm thế nào hoặc khi hạt nhân Linux tải, nhưng một số tin nhắn trên internet chỉ ra rằng BIOS (!! tin hay không) là đi qua danh sách các đĩa khởi động xuống để grub, mà sau đó sử dụng file device.map chỉ định thiết bị nào có grub (hd *, ). Lưu ý rằng/dev/sd đã được xác định ở giai đoạn này, vì bạn có thể sử dụng liên kết cố định dev vĩnh viễn. Các bản đồ thiết bị này dường như bằng cách nào đó chuyển sang hệ thống tệp gốc thực tế. Vì vậy, đây là một điều bootloader bây giờ?

Quay trở lại udev như một giải pháp tiềm năng, tôi đã tìm thấy một báo cáo lỗi trên google http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=578826, dẫn đến một giải pháp mà nó được DISadviced thay đổi NAME udev (cuối cùng sẽ trở thành/dev/sd * như chúng ta biết).

Đối với các trang MAN udev gợi ý:

| The following keys can get values assigned: 
| 
| NAME 
| The name of the node to be created, or the name the network 
| interface should be renamed to. 
    NOTE: changing the kernel-provided name of device nodes 
    (except for network devices) is not supported and can result 
    in unexpected behavior. 
    Today, the kernel defines the device nodes names, and udev 
    is expected to only manage the node's permissions and 
    additional symlinks. 

... Nhưng tôi đã đi ra ngoài để làm điều đó anyway theo một cách hơi thay đổi.

# vi /etc/udev/rules.d/00-corrections.rules 

KERNEL=="sd?", ATTRS{model}=="SAMSUNG SP0411N", NAME="sda" 
KERNEL=="sd??", ATTRS{model}=="SAMSUNG SP0411N", NAME="sda%n" 
KERNEL=="sda", ATTRS{model}!="SAMSUNG SP0411N", NAME="sdb" 
KERNEL=="sda?", ATTRS{model}!="SAMSUNG SP0411N", NAME="sdb%n" 

Về cơ bản, những gì nó làm là "Nếu mô hình là samsung, gán nó TÊN sda *. Nếu mô hình không phải là Samsung, nhưng đã được chỉ định sda *, gán nó TÊN sdb *." Quy tắc này được đặt trước tất cả các quy tắc khác càng nhiều càng tốt.Lưu ý rằng tôi không chắc chắn về điều này, bởi vì dường như có một số tập tin quy tắc 'vô hình', và mặc dù bạn đã đổi tên các thiết bị, hạt nhân ở đâu đó trong 'kernel-loaded-memory', vẫn có thể có tham chiếu sai. Đây có thể là điều hiển nhiên khi bạn nhìn vào các tập tin /var/log/boot.log, nơi mà trong trường hợp của tôi, ban đầu nó nói:

%G  Welcome to [0;36mCentOS[0;39m 
Starting udev: %G[60G[[0;32m OK [0;39m]Setting hostname UncleFloServer: [60G[[0;32m OK [0;39m]ERROR: asr: seeking device "/dev/sda" to 5999998795264 
ERROR: ddf1: seeking device "/dev/sda" to 5999998795264 
ERROR: ddf1: seeking device "/dev/sda" to 5999998664192 
ERROR: hpt45x: seeking device "/dev/sda" to 5999998790144 
ERROR: isw: seeking device "/dev/sda" to 5999998794752 
ERROR: jmicron: seeking device "/dev/sda" to 5999998795264 
ERROR: lsi: seeking device "/dev/sda" to 5999998795264 
ERROR: nvidia: seeking device "/dev/sda" to 5999998794752 
ERROR: pdc: seeking device "/dev/sda" to 137438913024 
ERROR: pdc: seeking device "/dev/sda" to 137438920192 
ERROR: pdc: seeking device "/dev/sda" to 137438927360 
ERROR: pdc: seeking device "/dev/sda" to 137438934528 
ERROR: sil: seeking device "/dev/sda" to 5999998795264 
ERROR: via: seeking device "/dev/sda" to 5999998795264 
Setting up Logical Volume Management: No volume groups found 
[60G[[0;32m OK [0;39m]Checking filesystems 
_CentOS-6.4-x86_: clean, 85517/655360 files, 662649/2621440 blocks 
/dev/sda1: clean, 56/65536 files, 33367/262144 blocks 
[60G[[0;32m OK [0;39m]Remounting root filesystem in read-write mode: [60G[[0;32m OK [0;39m]Mounting local filesystems: [60G[[0;32m OK [0;39m]Enabling local filesystem quotas: [60G[[0;32m OK [0;39m]Enabling /etc/fstab swaps: [60G[[0;32m OK [0;39m] 

Ở đây, thiết bị Samsung của tôi là 40GB (mà tôi muốn như/dev/sda), và Areca Raid lớn của tôi là 6TB (mà tôi muốn là/dev/sdb).

Một số câu hỏi còn lại vẫn

  1. làm các lỗi có ý nghĩa gì?

  2. Các lỗi này là nguyên nhân của hạt nhân hay nguyên nhân của tệp quy tắc vẫn chạy trước số sửa lỗi 00 của tôi từ udev?

  3. Những lỗi này có biểu thị sự cố đe doạ dữ liệu không? Phân vùng Areca không có vấn đề gì với một trong các thư mục của tôi trong fstab.

  4. Có phương pháp gán thiết bị sớm hơn, tốt hơn không?

+0

Thực ra, điều này nghe rất gần với những gì tôi cần. Nhưng làm thế nào để sử dụng nó? http://en.wikipedia.org/wiki/Udev –

+0

Xin lỗi, tôi quên đề cập đến: Bản sửa lỗi cuối cùng được sửa đổi là 00-corrections.rules từ Chỉnh sửa của tôi từ ngày 25 tháng 8 dường như hoạt động, ngoài các lỗi đã đề cập. –

+0

Thay vì cố gắng lấy tên thiết bị ổn định bằng udev, thường dễ sử dụng nhãn hoặc ID để gắn hệ thống tập tin thay vì tên thiết bị. (Hoặc sử dụng khối lượng lvm cũng có đặt tên tĩnh). – eckes

Trả lời

11

Ngày nay, hạt nhân Linux tự động điền/dev/theo quy tắc UDEV.

Hãy để tôi giải thích cách hoạt động của tệp thiết bị. Mỗi tệp thiết bị, thường là một tệp thiết bị khối, có một số lớn và một số nhỏ. Những con số này thực sự mô tả những gì thiết bị tập tin trỏ đến. Tên không đóng bất kỳ vai trò nào trong điều này. Chúng ta hãy có một cái nhìn tại trường hợp cụ thể của chúng ta về đĩa:

# ls -l sd* 
brw-rw---- 1 root disk 8, 0 Aug 22 15:45 sda 
brw-rw---- 1 root disk 8, 1 Aug 22 15:45 sda1 
brw-rw---- 1 root disk 8, 2 Aug 22 15:45 sda2 
brw-rw---- 1 root disk 8, 3 Aug 22 15:45 sda3 
brw-rw---- 1 root disk 8, 5 Aug 22 15:45 sda5 
brw-rw---- 1 root disk 8, 6 Aug 22 15:45 sda6 

Ở đây bạn thấy rằng đĩa đầu tiên của tôi có các phân vùng khác nhau và tôi khởi động vào ngày 22 tháng 8, vào 3 giờ chiều, đó là khi các hạt nhân tạo ra các tập tin theo các quy tắc . Bạn cũng có thể thấy rằng số chính là 8 và các số nhỏ được sử dụng để truy cập các phân vùng (0 trỏ tới toàn bộ đĩa). Chữ 'b' ở đầu mỗi dòng cho biết mỗi cái trong số này là một tệp "thiết bị khối" đặc biệt.

Như tôi đã nói, hạt nhân tạo tệp tự động "những ngày này". Nó không phải lúc nào cũng giống như vậy và nó không giống như vậy trên các hệ thống Unix khác. Ở đó, các tệp sẽ được tạo tĩnh và người dùng sẽ tạo hoặc thao tác các tệp này.

Hoàn toàn có thể tạo tệp thiết bị của riêng bạn, với tên của riêng bạn và các số chính/số phụ. Xem mknod (man mknod) cho điều đó. Tuy nhiên, sau khi bạn khởi động lại, các tệp tùy chỉnh của bạn sẽ biến mất.

Khả năng thứ hai là thay đổi quy tắc UDEV. Các quy tắc sẽ được xử lý trong quá trình khởi động hệ thống và đảm bảo cho bạn một hành vi nhất quán vĩnh viễn. Hướng dẫn tốt về các quy tắc này được tìm thấy tại đây: http://www.reactivated.net/writing_udev_rules.html

Bạn sẽ thấy rằng có thể xác định quy tắc tạo "sda *" cho thông tin phần cứng cụ thể khớp với thiết bị của bạn. Bạn sẽ cần phải thay thế các quy tắc ban đầu sẽ tạo ra sda với bạn. Cách thức hoạt động này phụ thuộc vào phân phối của bạn.

Vì tôi nghĩ đây là một doanh nghiệp nguy hiểm cho người mới, tôi sẽ không giải thích cho bạn các bước cụ thể; tài liệu tôi đã liên kết ở trên sẽ cung cấp cho bạn tất cả thông tin bạn cần và bạn thực sự nên đọc tất cả.

+0

Và chỉ cần một lưu ý, tôi sẽ chỉ phế liệu CloneZilla và sử dụng dd thay thế. Sau đó, bạn có thể sử dụng nhãn hiệu vv, và bạn linh hoạt, và nó rất dễ dàng, và bạn không gặp khó khăn gì. Phân vùng nhân bản rất dễ dàng! Bạn thậm chí có thể kết hợp dd với nc để sao chép từ xa ... – ypnos

+0

Tôi đã đọc một chút về udev, và tôi nghĩ câu trả lời này đang đi đúng hướng. Hãy không thảo luận tại sao tôi sử dụng CloneZilla, nhưng để giữ nó ngắn gọn: bạn cần ít nhất một hệ điều hành để chạy dd. Tôi có thể cài đặt một hệ điều hành thứ hai, nhưng sự cám dỗ là cao để sử dụng hệ điều hành đó cho các ứng dụng khác. Clonezilla được cài đặt trong một phân vùng riêng biệt, nó đặt câu hỏi đúng trong định dạng có thể đọc được của con người (ngoài/dev/sd *), nó rất đáng tin cậy, và nó chỉ là _there_. Mặc dù bạn có một điểm, tôi thích điều này hơn faffing với dd và một hệ điều hành CD để sao lưu dữ liệu quý giá của tôi. –

+0

Nếu bạn bắt đầu lộn xộn với UDEV, dd đã là một miếng bánh. Bạn có thể ném một cái gì đó như http://grml.org trên một phân vùng, quá. Sử dụng dd :-). – ypnos

-2

Theo như tôi biết, điều đó là không thể. Hệ thống sẽ chọn cổng SATA 1 là SDA và vv. Tuy nhiên, bạn có thể sử dụng smartctl để xác định số sêri của SDA/B hoặc flash đèn LED ổ đĩa nếu có thể.

+0

Trên thực tế, có thể thay đổi mọi thứ trong/dev/.. – ypnos

+0

Hệ thống của tôi được gán sda, sdb, stc và cứ như vậy dựa trên thứ tự mà tôi đã chèn ổ đĩa của mình. Chúng hoàn toàn không hoạt động với các cổng SATA. – Hubro

-2

Tại sao bạn không sử dụng UUID thay vì dựa vào phân bổ động? SD? luôn luôn năng động, trong khi UUID là giá trị cố định và không thay đổi, ngay cả khi bạn thay đổi, distro hoặc nếu bạn cài đặt ổ đĩa cứng của bạn trong máy Linux khác UUID sẽ giống nhau.

sudo blkid sẽ hiển thị cho bạn UUID sau đó bạn có thể sử dụng nó trên fstab để gắn kết các phân vùng bất cứ nơi nào bạn muốn.

+2

OP nói cụ thể rằng một số chương trình yêu cầu sử dụng lệnh/dev/sd #.Đề xuất của bạn hữu ích khi gắn UUID cụ thể vào điểm gắn kết hệ thống tệp (chẳng hạn như trong/etc/fstab) mà không dựa vào việc gán/dev/sd #. OP muốn kiểm soát trực tiếp nhiệm vụ/dev/sd #. – BarryPye

+0

/dev/disk/uuid ... – Joe